{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Solving a one-asset HANK model in sequence space\n",
    "In this notebook we show how to\n",
    "1. [Adapt general HA blocks to specific models](#1-hetblock)\n",
    "2. [Solve for a steady state with multiple calibration targets](#2-calibration)\n",
    "3. [Compute linearized impulse responses: unwrap convenience function](#3-linear)\n",
    "4. [Compute nonlinear impulse responses: quasi-Newton performs well even for large nonlinearities](#4-nonlinear)\n",
    "5. [Check local determinacy](#5-determinacy)\n",
    "\n",
    "This notebook accompanies the working paper by Auclert, Bardóczy, Rognlie, Straub (2019): \"Using the Sequence-Space Jacobian to Solve and Estimate Heterogeneous-Agent Models\". Please see the [Github repository](https://github.com/shade-econ/sequence-jacobian) for more information and code.\n",
    "\n",
    "\n",
    "The model is a HA version of the textbook New Keynesian model. Technology is linear in labor, prices are sticky á la Rotemberg, and monetary policy follows a Taylor rule. For a detailed description of the model, please see the paper. As a reminder, the model can be summarized in sequence form as\n",
    "\n",
    "$$\n",
    "\\textbf{H}_t(\\textbf{Y}, Z) \\equiv \n",
    "\\begin{pmatrix}\n",
    "Y_t - Z_t L_t\n",
    "\\\\\n",
    "Y_t \\left[1 - \\frac{\\mu}{\\mu-1}\\frac{1}{2\\kappa} \\log(1 + \\pi_t)^2\\right] - w_t L_t - d_t\n",
    "\\\\\n",
    "r_t B - \\tau_t\n",
    "\\\\\n",
    "r^*_t + \\phi \\pi_t - i_t\n",
    "\\\\\n",
    "1 + r_t - \\frac{1+i_{t-1}}{1+\\pi_t}\n",
    "\\\\\n",
    "\\kappa \\left(\\frac{w_t}{Z_t} - \\frac{1}{\\mu} \\right)  + \\frac{1}{1+r_{t+1}} \\frac{Y_{t+1}}{Y_t} \\log(1+\\pi_{t+1}) - \\log(1+\\pi_t)\n",
    "\\\\\n",
    "\\mathcal{A}_t(\\{r_s, w_s, \\tau_s, d_s\\})  - B\n",
    "\\\\\n",
    "\\mathcal{N}_t(\\{r_s, w_s, \\tau_s, d_s\\}) - L_t\n",
    "\\end{pmatrix}\n",
    "= \\begin{pmatrix} 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0\\end{pmatrix},\n",
    "\\qquad t = 0, 1, \\dots\n",
    "$$\n",
    "\n",
    "where the endogenous variables are $\\textbf{Y} = (Y, L, r, w, d, \\pi, \\tau, i)$ and the exogenous variables are $\\textbf{Z}=(r^*, Z)$. \n",
    "\n",
    "The asset demand and labor supply functions $\\{\\mathcal{A}, \\mathcal{L}\\}$ follow from the household block with Bellman equation\n",
    "\n",
    "$$\n",
    "\\begin{align} \\tag{HH}\n",
    "V_t(e, a_{-}) = \\max_{c, n, a} &\\left\\{\\frac{c^{1-\\sigma}}{1-\\sigma} - \\varphi \\frac{n^{1+\\nu}}{1+\\nu} + \\beta \\sum_{e'}V_{t+1}(e', a) \\mathcal{P}(e,e') \\right\\}\n",
    "\\\\\n",
    "c + a &= (1 + r_t)a_{-} + w_t e n - \\tau_t \\bar{\\tau}(e) + d_t \\bar{d}(e)\n",
    "\\\\\n",
    "a &\\geq 0\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "where $\\bar\\tau(e)$ and $\\bar d(e)$ are skill-specific incidence rules for taxes and dividends. \n",
    "\n",
    "We can think of the model as a directed acyclical graph (DAG) with **3 endogenous inputs**\n",
    "\n",
    "![Directed Acyclical Graph](figures/hank1_dag.png) \n",
    "\n",
    "and write it as an implicit function\n",
    "\n",
    "$$\n",
    "H(\\pi, Y, w; \\epsilon, Z) = 0.\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0 Import packages\n",
    "The first two are standard python packages, the rest contain code we wrote for this project."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import utils\n",
    "from het_block import het\n",
    "import simple_block as sim\n",
    "from simple_block import simple\n",
    "import jacobian as jac\n",
    "import nonlinear\n",
    "import hank\n",
    "import determinacy as det"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=\"1-hetblock\"></a>\n",
    "\n",
    "## 1 Adapting HA blocks with hetinput attachments\n",
    "\n",
    "As we have seen in the Krusell-Smith notebook, the main task in setting up HA blocks is to write a backward iteration function that represents the Bellman equation. This has to be a single step of an iterative solution method such as value function iteration. For the standard income fluctuation problem with endogenous labor supply we're dealing with here, the endogenous gridpoint method of [Carroll (2006)](https://www.sciencedirect.com/science/article/pii/S0165176505003368) is the best practice.\n",
    "\n",
    "Solving the endogenous-labor problem via EGM is standard but somewhat tedious and so the details are left to ``hank.py``. Instead we will focus on a new feature that makes it much easier to adapt HetBlocks to different macro enviroments.\n",
    "\n",
    "The backward iteration function `hank.household` corresponds to the general problem:\n",
    "\n",
    "$$\n",
    "\\begin{align} \\tag{HH-general}\n",
    "V_t(e, a_{-}) = \\max_{c, n, a} &\\left\\{\\frac{c^{1-\\sigma}}{1-\\sigma} - \\varphi \\frac{n^{1+\\nu}}{1+\\nu} + \\beta \\sum_{e'}V_{t+1}(e', a) \\mathcal{P}(e,e') \\right\\}\n",
    "\\\\\n",
    "c + a &= (1 + r_t)a_{-} + w_t e n + T_t(e)\n",
    "\\\\\n",
    "a &\\geq 0\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "That is, households take as given the sequence of interest rates $r_t$, wages $w_t$ and skill-specific transfers $T_t(e).$ In the context of this particular HANK model, transfers equal dividends minus taxes. But it's easy to imagine many other cases. Rather than writing a specific backwatd iteration function for each of them, we can just supply a function that specifies how the $\\{r_t, w_t, T_t(e)\\}$ are determined in this particular case. We refer such functions as **hetinput**. \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since $r_t$ and $w_t$ correspond directly to aggregate variables of the model, we only have to specify transfers:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def transfers(pi_e, Div, Tax, e_grid, div_rule, tax_rule):    \n",
    "    div = Div / np.sum(pi_e * div_rule) * div_rule\n",
    "    tax = Tax / np.sum(pi_e * tax_rule) * tax_rule\n",
    "    T = div - tax\n",
    "    return T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's attach this hetinput function to the generic household HetBlock using (the aptly-named) ``HetBlock.attach_hetinput`` method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "household = hank.household.attach_hetinput(transfers)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each HetBlock can be associated with at most one hetinput. Once it is attached, every call to the HetBlock will be routed through the hetinput function first."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=\"2-calibration\"></a>\n",
    "\n",
    "## 2 Calibrating the steady state\n",
    "Similarly to the RBC example, we calibrate the discount factor $\\beta$ and disutility of labor $\\varphi$ to hit a target fot the interest rate and effective labor $L=1.$\n",
    "\n",
    "This is a two-dimensional rootfinding problem that we solve by Broyden's method, which we implemented in ``utils.py``. It takes a function $f: \\mathbb{R}^n \\to \\mathbb{R}^n$ and an initial guess for its roots, $x_0 \\in \\mathbb{R}^n$, and backtracks whenever $f$ returns a `ValueError`.\n",
    "\n",
    "The calibration has two substantive steps. First, express analytically all variables that don't depend on $(\\beta, \\varphi).$ Second, construct the residual function that takes the current guesses $(\\beta, \\varphi)$ and maps them into deviations from he calibration targets. This just requires an evaluation of the household block. The rootfinder does the rest. \n",
    "\n",
    "Although additional efficiency gains would be possible here (for instance, by updating our initial guesses for policy and distribution along the way), we will not implement them, since they are not our focus here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def hank_ss(beta_guess=0.986, vphi_guess=0.8, r=0.005, eis=0.5, frisch=0.5, mu=1.2, B_Y=5.6, rho_s=0.966, sigma_s=0.5,\n",
    "            kappa=0.1, phi=1.5, nS=7, amax=150, nA=500, tax_rule=None, div_rule=None, noisy=False):\n",
    "    \"\"\"Solve steady state of full GE model. Calibrate (beta, vphi) to hit target for interest rate and Y.\"\"\"\n",
    "\n",
    "    # set up grid\n",
    "    a_grid = utils.agrid(amax=amax, n=nA)\n",
    "    e_grid, pi_e, Pi = utils.markov_rouwenhorst(rho=rho_s, sigma=sigma_s, N=nS)\n",
    "    \n",
    "    # default incidence rules are proportional to skill\n",
    "    if tax_rule is None:\n",
    "        tax_rule = e_grid  # scale does not matter, will be normalized anyway\n",
    "    if div_rule is None:\n",
    "        div_rule = e_grid\n",
    "    assert len(tax_rule) == len(div_rule) == len(e_grid), 'Incidence rules are inconsistent with income grid.'\n",
    "\n",
    "    # solve analytically what we can\n",
    "    B = B_Y\n",
    "    w = 1 / mu\n",
    "    Div = (1 - w)\n",
    "    Tax = r * B\n",
    "    T = transfers(pi_e, Div, Tax, e_grid, div_rule, tax_rule)\n",
    "\n",
    "    # initialize guess for policy function iteration\n",
    "    fininc = (1 + r) * a_grid + T[:, np.newaxis] - a_grid[0]\n",
    "    coh = (1 + r) * a_grid[np.newaxis, :] + w * e_grid[:, np.newaxis] + T[:, np.newaxis]\n",
    "    Va = (1 + r) * (0.1 * coh) ** (-1 / eis)\n",
    "\n",
    "    # residual function\n",
    "    def res(x):\n",
    "        beta_loc, vphi_loc = x\n",
    "        # precompute constrained c and n which don't depend on Va\n",
    "        c_const_loc, n_const_loc = hank.solve_cn(w * e_grid[:, np.newaxis], fininc, eis, frisch, vphi_loc, Va)\n",
    "        if beta_loc > 0.999 / (1 + r) or vphi_loc < 0.001:\n",
    "            raise ValueError('Clearly invalid inputs')\n",
    "        out = household.ss(Va=Va, Pi=Pi, a_grid=a_grid, e_grid=e_grid, pi_e=pi_e, w=w, r=r, beta=beta_loc, eis=eis,\n",
    "                           Div=Div, Tax=Tax, frisch=frisch, vphi=vphi_loc, c_const=c_const_loc, n_const=n_const_loc,\n",
    "                           tax_rule=tax_rule, div_rule=div_rule, ssflag=True)\n",
    "        return np.array([out['A'] - B, out['NS'] - 1])\n",
    "\n",
    "    # solve for beta, vphi\n",
    "    (beta, vphi), _ = utils.broyden_solver(res, np.array([beta_guess, vphi_guess]), noisy=noisy)\n",
    "\n",
    "    # extra evaluation for reporting\n",
    "    c_const, n_const = hank.solve_cn(w * e_grid[:, np.newaxis], fininc, eis, frisch, vphi, Va)\n",
    "    ss = household.ss(Va=Va, Pi=Pi, a_grid=a_grid, e_grid=e_grid, pi_e=pi_e, w=w, r=r, beta=beta, eis=eis,\n",
    "                      Div=Div, Tax=Tax, frisch=frisch, vphi=vphi, c_const=c_const, n_const=n_const,\n",
    "                      tax_rule=tax_rule, div_rule=div_rule, ssflag=True)\n",
    "    \n",
    "    # check Walras's law\n",
    "    walras = 1 - ss['C']\n",
    "    assert np.abs(walras) < 1E-8\n",
    "    \n",
    "    # add aggregate variables\n",
    "    ss.update({'B': B, 'phi': phi, 'kappa': kappa, 'Y': 1, 'rstar': r, 'Z': 1, 'mu': mu, 'L': 1, 'pi': 0,\n",
    "               'walras': walras, 'ssflag': False})\n",
    "    return ss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.8.8\n"
     ]
    }
   ],
   "source": [
    "from platform import python_version\n",
    "\n",
    "print(python_version())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's solve for the steady state using our default calibration, and plot the labor supply policy as function of assets for each skill type. In general, poorer and more productive households choose to work more. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "On iteration 0\n",
      "x = 0.986,0.800\n",
      "y = 3.634,-0.009\n",
      "\n",
      "\n",
      "On iteration 1\n",
      "x = 0.983,0.787\n",
      "y = 0.791,-0.001\n",
      "\n",
      "\n",
      "On iteration 2\n",
      "x = 0.983,0.787\n",
      "y = 0.312,-0.000\n",
      "\n",
      "\n",
      "On iteration 3\n",
      "x = 0.982,0.786\n",
      "y = 0.018,-0.000\n",
      "\n",
      "\n",
      "On iteration 4\n",
      "x = 0.982,0.786\n",
      "y = 0.003,-0.000\n",
      "\n",
      "\n",
      "On iteration 5\n",
      "x = 0.982,0.786\n",
      "y = -0.001,0.000\n",
      "\n",
      "\n",
      "On iteration 6\n",
      "x = 0.982,0.786\n",
      "y = 0.000,-0.000\n",
      "\n",
      "\n",
      "On iteration 7\n",
      "x = 0.982,0.786\n",
      "y = -0.000,0.000\n",
      "\n",
      "\n",
      "On iteration 8\n",
      "x = 0.982,0.786\n",
      "y = -0.000,0.000\n",
      "\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ss = hank_ss(noisy=True)\n",
    "plt.plot(ss['a_grid'], ss['n'].T)\n",
    "plt.xlabel('Assets'), plt.ylabel('Labor supply')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=\"3-linear\"></a>\n",
    "\n",
    "## 3 Linearized dynamics using Jacobians\n",
    "Recall that we reduced the to the following DAG:\n",
    "\n",
    "![Directed Acyclical Graph](figures/hank1_dag.png) \n",
    "\n",
    "that can also be written as an implicit equation\n",
    "\n",
    "$$\n",
    "H(\\pi, Y, w; r^*, Z) =\n",
    "\\begin{pmatrix}\n",
    "\\kappa \\left(\\frac{w_t}{Z_t} - \\frac{1}{\\mu} \\right)  + \\frac{1}{1+r_{t+1}} \\frac{Y_{t+1}}{Y_t} \\log(1+\\pi_{t+1}) - \\log(1+\\pi_t)\n",
    "\\\\\n",
    "\\mathcal{A}_t(\\{r_s, w_s, \\tau_s, d_s\\})  - B\n",
    "\\\\\n",
    "\\mathcal{L}_t(\\{r_s, w_s, \\tau_s, d_s\\}) - L_t\n",
    "\\end{pmatrix}\n",
    "= \\begin{pmatrix} 0 \\\\ 0 \\\\ 0\\end{pmatrix},\n",
    "$$\n",
    "\n",
    "to be solved for $U=(\\pi, w, Y)$ given any $Z=(Z, r^*)$. The rest of the endogenous variables are be obtained as explicit functions of $(\\pi, w, Y; Z, r^*)$ along the DAG, but it would be tedious to write them out.\n",
    "\n",
    "Keep in mind that the implicit function theorem implies that the response of unknowns is\n",
    "\n",
    "$$\n",
    "dU = \\underbrace{-H_U^{-1}H_Z}_{G_U} dZ \\tag{1}\n",
    "$$\n",
    "\n",
    "Recall that we already solved for a steady state and stored is as `ss`. Furthermore, we will use a 300-period truncation horizon. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1 Define simple blocks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "@simple\n",
    "def firm(Y, w, Z, pi, mu, kappa):\n",
    "    L = Y / Z\n",
    "    Div = Y - w * L - mu/(mu-1)/(2*kappa) * np.log(1+pi)**2 * Y\n",
    "    return L, Div\n",
    "\n",
    "@simple\n",
    "def monetary(pi, rstar, phi):\n",
    "    r = (1 + rstar(-1) + phi * pi(-1)) / (1 + pi) - 1\n",
    "    return r\n",
    "\n",
    "@simple\n",
    "def fiscal(r, B):\n",
    "    Tax = r * B\n",
    "    return Tax\n",
    "\n",
    "@simple\n",
    "def mkt_clearing(A, NS, C, L, Y, B, pi, mu, kappa):\n",
    "    asset_mkt = A - B\n",
    "    labor_mkt = NS - L\n",
    "    goods_mkt = Y - C - mu/(mu-1)/(2*kappa) * np.log(1+pi)**2 * Y\n",
    "    return asset_mkt, labor_mkt, goods_mkt\n",
    "\n",
    "@simple\n",
    "def nkpc(pi, w, Z, Y, r, mu, kappa):\n",
    "    nkpc_res = kappa * (w / Z - 1 / mu) + Y(+1) / Y * np.log(1 + pi(+1)) / (1 + r(+1)) - np.log(1 + pi)\n",
    "    return nkpc_res"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2 Cut to the chase\n",
    "The surest way to obtain the general equilibrium Jacobians is to use the `get_G` convenience function. Notice the `save=True` option. This means that we're saving the HA Jacobians calculated along the way for later use."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# setup\n",
    "T = 300\n",
    "exogenous = ['rstar', 'Z']\n",
    "unknowns = ['pi', 'w', 'Y']\n",
    "targets = ['nkpc_res', 'asset_mkt', 'labor_mkt']\n",
    "\n",
    "# general equilibrium jacobians\n",
    "block_list = [firm, monetary, fiscal, nkpc, mkt_clearing, household] \n",
    "G = jac.get_G(block_list, exogenous, unknowns, targets, T, ss, save=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3 Break down `get_G`\n",
    "\n",
    "Under the hood, the very powerful `jac.get_G` performs the following steps:\n",
    " - orders the blocks so that we move forward along the model's DAG\n",
    " - computes the partial Jacobians $\\mathcal{J}^{o,i}$ from all blocks (if their Jacobian is not supplied already), only with respect to the inputs that actually change: unknowns, exogenous shocks, outputs of earlier blocks\n",
    " - forward accumulates partial Jacobians $\\mathcal{J}^{o,i}$ to form total Jacobians $\\mathbf{J}^{o,i}$\n",
    " - packs $\\mathbf{J}^{o,i}$ to form $\\mathbf{H_U}$ and $\\mathbf{H_Z}$\n",
    " - solves for the GE Jacobians for unknowns $\\mathbf{G_U} = \\mathbf{H_U}^{-1}\\mathbf{H_Z}$\n",
    " - forward accumulates GE Jacobians to obtain $\\mathbf{G}$ for other endogenous variables \n",
    " \n",
    "Let's take a closer look at each."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 1: Topological sort and partial Jacobians\n",
    "By looking at the inputs and outputs of each block, we can order them so that we only move forward on the DAG (this is called a **topological sort**). Knowing the DAG is a prerequisite for all that follows, and also allows us to avoid wasteful Jacobian calculations: we only need Jacobians with respect to unknowns, exogenous, and outputs of earlier blocks."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "curlyJs, required = jac.curlyJ_sorted(block_list, unknowns+exogenous, ss, T)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The first output `curlyJs` is a list of nested dictionaries. Each entry in the list contains all the necessary Jacobians for the corresponding block. Blocks are ordered according to the topological sort.\n",
    "\n",
    "For example, the first block is `monetary`, because it only takes an unknown $\\pi$ and an exogenous $r^*$ as inputs. Let's take a look. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'r': {'pi': SimpleSparse({(0, 0): -1.005, (-1, 0): 1.500}), 'rstar': SimpleSparse({(-1, 0): 1.000})}}\n"
     ]
    }
   ],
   "source": [
    "print(curlyJs[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since this is a simple block, the Jacobians are represented as a instances of the `SimpleSparse` class. Note that `jac.curlyJ_sorted` correctly determined that it is not necessary to differentiate with respect to the Taylor rule parameter $\\phi$ (if we wanted to consider shocks to this parameter, we'd just have to include it among the exogenous inputs.)\n",
    "\n",
    "The second output `required` is a set of extra variables (not unknowns and exogenous) that we have to differentiate with respect to, because they are outputs of some blocks and inputs of others. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'Tax', 'L', 'r', 'C', 'Div', 'NS', 'A'}\n"
     ]
    }
   ],
   "source": [
    "print(required)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 2: Compose Jacobians along the DAG\n",
    "We're interested in the Jacobians with respect to the inputs of $H$, i.e. the unknowns $(\\pi, w, Y)$ and the shocks $(r^*, Z).$  \n",
    "\n",
    "First, we apply the chain rule by using `jac.forward_accumulate`. This gives the $T \\times T$ building blocks of the $H_U$ and $H_Z$ that relate targets to unknowns and exogenous. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_keys(['nkpc_res', 'asset_mkt', 'labor_mkt'])\n",
      "dict_keys(['pi', 'Y', 'w'])\n"
     ]
    }
   ],
   "source": [
    "J_curlyH_U = jac.forward_accumulate(curlyJs, unknowns, targets, required)\n",
    "J_curlyH_Z = jac.forward_accumulate(curlyJs, exogenous, targets, required)\n",
    "print(J_curlyH_U.keys())\n",
    "print(J_curlyH_U['asset_mkt'].keys())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we just have to pack them into two (big) matrices. These capture (to first order) the implicit relationship between unknowns $X=(\\pi, w, Y)$ induced by the requirement that markets clear and the Phillips curve holds, i.e. that the targets of the DAG evaluate to zero."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(900, 900)\n",
      "(900, 600)\n"
     ]
    }
   ],
   "source": [
    "H_U = jac.pack_jacobians(J_curlyH_U, unknowns, targets, T)\n",
    "H_Z = jac.pack_jacobians(J_curlyH_Z, exogenous, targets, T)\n",
    "print(H_U.shape)\n",
    "print(H_Z.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 3: General equilibrium Jacobians\n",
    "First we can get the response of unknowns directly by the implicit function theorem."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_keys(['pi', 'w', 'Y'])\n"
     ]
    }
   ],
   "source": [
    "G_U = jac.unpack_jacobians(-np.linalg.solve(H_U, H_Z), exogenous, unknowns, T)\n",
    "print(G_U.keys())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And the rest can be obtained by forward accumulation that accounts for the direct and indirect effects alike."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "curlyJs = [G_U] + curlyJs\n",
    "outputs = set().union(*(curlyJ.keys() for curlyJ in curlyJs)) - set(targets)\n",
    "\n",
    "G2 = jac.forward_accumulate(curlyJs, exogenous, outputs, required | set(unknowns))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.4 Results\n",
    "First let's check that we have correctly reconstructed the steps of `jac.get_G`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "for o in G:\n",
    "    for i in G[o]:\n",
    "        assert np.allclose(G[o][i], G2[o][i])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let's consider 25 basis point monetary policy shocks with different persistences and plot the response of inflation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xd4VGX2wPHvmUnvPaQQSOgdpAiKioqrq4CsioqCff2t61rX7hZ1XbvormV31bVhb4B1LQhYKEpXeoeQ3kkv8/7+uDc4YkgCTDKZ5HyeZ55MueXMzM2c+9YrxhiUUkp1XQ5vB6CUUsq7NBEopVQXp4lAKaW6OE0ESinVxWkiUEqpLk4TgVJKdXGaCNqJiCSKyFcisk9EHhWRu0TklSPY3joRmeDBEJU6bCJyiYh84/a4XEQy2mnfC0XkCg9v82fvp7PTRHAERGSniExs5eJXAgVAhDHmj4e4nxdF5F7354wxg4wxCw9lO8q3HOnJgjcZY8KMMdu9HYdqHU0E7acHsN740Ag+segx4qNExM/bMSjfoP/kHtJYlBSRR0SkWER2iMiv7ddeBC4GbrGLzL8oRYjI2yKSIyKldhXSIPv5K4EL3db9wH5+f2lERAJF5HERybJvj4tIoP3aBBHJFJE/ikieiGSLyKXNvI+FIvJ3EfkWqAQyRCRSRP5rr7tXRO4VEae9fG8RWWTHXSAib7pty4jItSKy3X7t4cbEIiIOEfmTiOyy43pZRCLt13ra614sIrvtde902+4YEVkuImUikisis9xeGysii0WkRETWuFef2d/Rdrt6boeIXHiQz+Au+/t4xV72BxHpKyK327HuEZFfuS2fLCLvi0iRiGwVkd8esK237Pe3z67SG3XAuu+KSL4d07X286cBdwDn2d/7Gvv5S0Vkg72t7SLyf27bavyubxWRHOAFEflRRCa7LeNvf57Dm3jfjevfYS+z0/0zso+Dl+1Yd9nfX5O/Ifb319u+HyxWdegu+zj5xn7uIxG55oD11orI1Ca2F2R/H4X2d/u9iCS6LdJDRL61P5fPRCTObd0p9udeItbxPcDtte4i8p79ngpF5MmDvJ+H7bgjpZlj3mcZY/R2mDdgJzDRvn8JUAf8FnACVwFZgNivvwjc67buXcArbo8vA8KBQOBxYLXbaz9bt4l93wMsBRKAeGAx8Df7tQlAvb2MP3A61g989EHe00JgNzAI8LPXmQv8Bwi19/Ed8H/28q8Dd2KdVAQB4922ZYAFQAyQBmwGrnB7v1uBDCAMeA+Ybb/W0173WSAYGAbUAAPs15cAM+37YcBY+34KUGi/Rwdwiv043o69DOhnL5sEDDrIZ3AXUA2can8GLwM77Pfpb3/HO9yWXwQ8bb//4UA+cPIB2zrdPi7uB5barzmAFcBfgAD7s9gOnNrUMWI/dwbQCxDgBPu7POqA7/pBrOMoGLgFeNNt/TOBHw7yvhvXn2WvfwJQ4faZvQzMwzpOe9rf5+Vux/83B3z3ve37T2EdVyn2Z3CMvf1zgWVu6wyzv6+AJmL7P+ADIMTexkisalbsbW8D+trveSHwgP1aX/s9nGJ/d7dgHXcB9nbWAI9hHR/7j9/G92N/R88CnwIhLR3zvnrzegC+fOOXiWCr22sh9j9DN/vxizSTCA7YbpS9bmRT6zax723A6W6vnQrstO9PAKoAP7fX87B/PJvY90LgHrfHiVg/wsFuz00HFtj3XwaeAVKb2JYBTnN7/Htgvn1/PvB7t9f6YSVSP35KBKlur38HnG/f/wq4G4g7YH+3YicTt+c+xSqNhQIlwNnu7+Ugn8FdwOdujycD5YDTfhxuxxcFdAcagHC35e8HXnTb1hdurw0Equz7RwO7D9j37cALLR0jbsvPBa5z+65rgSC315OBffz0o/kOcMtBtjUBKxGEuj33FvBnrB/NGmCg22v/Byx0O/5/kQiwfiyrgGFN7C8QKAL62I8fAZ4+SGyXYZ3gDD3IMfunA46z/9n3/wy85faaA9hrv9dxWEnbr4ltXgIsA94E3sUtOdHMMe+rN60a8qycxjvGmEr7blhLK4mIU0QeEJFtIlKG9SMPENfMau6SgV1uj3fZzzUqNMbUuz2ubCGuPW73e2CdSWXbResSrNJBgv36LVhnp9/Zxe/LmtmWe1xNxeyHlXga5bjdd4/5cqwzvY12FcEkt1inNcZpxzoeSDLGVADnAb+z38tHItK/mc8g1+1+FVBgjGlwe4wdTzJQZIzZd8B7SWnmfQSJVX/fA0g+IN47DvgMfkZEfi0iS+1qqBKskob7cZJvjKlufGCMyQK+Bc4WkSjg18CrzbzvYvuzcn8vyfY+Avjld+b+PpsSh3XWvO3AF4wxNViJZoZdxTQdmH2Q7czGSupviFX9+ZCI+Lu9frBj5WfHmTHGhXVMpmAl8V0H/G+4641VgrrbGFPr9nxLx7zP0UTQMVyAdcBNBCKxzojBOtjAOrtqThbWj0qjNPu5w+W+vz1YZ4Jxxpgo+xZhjBkEYIzJMcb81hiTjHWG+HRj3bCt+0Hiairmen7+A9x0cMZsMcZMx0pGDwLviEioHetstzijjDGhxpgH7PU+NcacglUttBGryH+ksoAYEQk/4L3sbcW6e7CqmNzjDTfGnN74Vt0XFqvd512sM+dEY0wU8DE/HSe/WMf2EjADmAYsMcY0F1u0/Vm6v5csrB5vdfzyO2vpfRZgVY31OsjrL2G1gZ0MVBpjljS1kDGmzhhztzFmIFbV0iTgohb2DQccZyIiWMfkXqzPP00O3qi+AbgU+ERE+rnF0tIx73M0EXQM4Vg/toVYVUr3HfB6Llb98cG8DvxJROLtRrK/AB7pdmiMyQY+Ax4VkQixGnl7icgJACIyTURS7cWLsX6IGtw2cbOIRItId+A6rKJ2Y8w3iEi6iIRhvec3mzk7209EZohIvH12V2I/3YD1nieLyKl2KSvIbgBNFWscxxT7R64Gq6qn4SC7aDVjzB6sKov77f0NxSqxNHfW3eg7oMxu3A22Yx4sIqPt13OBnm4NsgFY1Sn5QL1YnRF+9cvN/sJc4Cisz//lVix/t4gEiMhxWD+4b9ulobeAv4tIuIj0AG6khePM/o6eB2aJ1TDuFJFxdlLD/uF3AY9y8NIAInKiiAwRq5NCGVZSas339xZwhoicbJcg/oj1/S/G+vyzgQdEJNT+/o49IP7XsUppX4hILzuWlo55n6OJoGN4Gav4uhdYj9Xw6+6/wEC7+mBuE+vfCywH1gI/ACvt5zzlIqwfofVYB/47WGfVAKOBZSJSDryPVV+9w23deVgNoquBj+z3AtaPw2ys+v4dWGeNP+tB0ozTgHX2Pv+B1XZQbf8on4n1j5uPdcZ3M9Zx7sD6EcjCqpc+Aasu2ROmY5XisoA5wF+NMZ+3tJL94zoZq4F5B9bZ83NYpUKAt+2/hSKy0q5+uhbrx60YqyT5fiv2U4VVkkjHapRvTo697SysZPY7Y8xG+7VrsBpet2M1pL6G9T225Cas4/J7rM/+QX7+2/MyMITmk0o3rOOuDOtMfVELywNgjNmEVRp6AuvznQxMNsbUun3+vbE6SGRiVR8euI2XsDpbfCkiPWn5mPc5jT1alPI4ETFYDYFbvR1LVycifwH6GmNmNLPMBKzG6dSDLdMWROQi4EpjzPj23K/6iQ44UaqTE5EYrOqqmd6O5UAiEoJVMnva27F0ZVo1pFQnJtbgtj3AJ8aYr7wdjzsRORWrCi8Xq5pJeYlWDSmlVBenJQKllOrifKKNIC4uzvTs2dPbYSillE9ZsWJFgTEmvqXlfCIR9OzZk+XLl3s7DKWU8ikisqvlpbRqSCmlujxNBEop1cVpIlBKqS5OE4FSSnVxmgiUUqqL00SglFJdnCYCpZTq4jp1Iti6Io8fv2rN9UGUUqrr6uSJIJelc7dRW93itU6UUqrL6tSJYPjENGoq69m4JNvboSilVIfVqRNBt4xIumVEsGb+HlwunWVVKaWa0qkTAcCwk9MoK6hmx5p8b4eilFIdUqdPBBkj4omIC2LNF3u8HYpSSnVInT4ROBzC0BO7k72tlJwdpd4ORymlOpxOnwgABhybRECwn5YKlFKqCV0iEQQE+TFofDLbVuZRVlDl7XCUUqpDafNEICJOEVklIh/aj9NFZJmIbBGRN0UkoK1jABh6UioiwtoFme2xO6WU8hntUSK4Dtjg9vhB4DFjTB+gGLi8HWIgLDqIXiMTWP9tFjVVOsBMKaUatWkiEJFU4AzgOfuxACcB79iLvARMbcsY3I04JY266gbWf53VXrtUSqkOr61LBI8DtwAu+3EsUGKMaTwlzwRSmlpRRK4UkeUisjw/3zNjAOLTwknpG8XaBXtoaHC1vIJSSnUBbZYIRGQSkGeMWeH+dBOLNjnk1xjzjDFmlDFmVHx8vMfiGjYxjfLiGratzPPYNpVSype1ZYngWGCKiOwE3sCqEnociBIRP3uZVKBd62l6Do4lKjGENV/swRiddkIppdosERhjbjfGpBpjegLnA18aYy4EFgDn2ItdDMxrqxiaIg5h2Mndydu1j+ytJe25a6WU6pC8MY7gVuBGEdmK1Wbw3/YOoN/YbgSF+rNaB5gppRR+LS9y5IwxC4GF9v3twJj22O/B+Ac4GXxCCss/2UlJbiVRiSHeDEcppbyqS4wsbsrgE1JwOIU1X2qpQCnVtXXZRBAaGUjfMd3YuDib6vI6b4ejlFJe02UTAcDwk7tTX+fix6/1usZKqa6rSyeC2JQwug+M4YcFmTTU6QAzpVTX1KUTAcDwid2pLKtly/Jcb4eilFJe0eUTQfcBMcQkh7L6i906wEwp1SV1+UQgIgyf2J3CvRVkbiz2djhKKdXuunwiAOg7uhvBEQGs/mK3t0NRSql2p4kAcPo7GDohhd3riijMKvd2OEop1a40EdgGHZ+Cn7+DNfN1gJlSqmvRRGALDgug37gkNi/LpbKs1tvhKKVUu9FE4Gb4yd1pqHfxwyK9rrFSquvQROAmKjGEnkPj+HHRXuprG7wdjlJKtQtNBAcYPrE71eV1bFqW4+1QlFKqXWgiOEBynyji08JZM38PxqUDzJRSnZ8mggM0DjArzqlk17pCb4ejlFJtThNBE3qNTCAsOpBVn+m0E0qpzk8TQROcTgfDT0kja0sJX7+5RZOBUqpTa5dLVfqioSemsq+omjVf7MHV4OKE6f0Qh3g7LKWU8jhNBAchIhx7dm+cTgcrP91FQ4PhxBn9cWgyUEp1MpoImiEijJ2agcNPWP7RTlwNLk6+aAAOp9aoKaU6D00ELRARjp6cgdMpLHt/B6bBcPKlA3FqMlBKdRKaCFpp1OnpOPwcLHlvGw0Nhl9dPginnyYDpZTv01+yQ3DUr3owfloftq/K53/P/KjXOVZKdQqaCA7RsJO7c/z5fdm5toCP/71W5yRSSvk8TQSHYciEVE6c0Z/d64v46Om11GkyUEr5ME0Eh2ng+GROvmgAmZuK+ejJNdRW13s7JKWUOiyaCI5A/3FJnHLpQLK2lvLhE2uordJkoJTyPZoIjlDfMd341eWDyN1Rxvv/XE1NZZ23Q1JKqUOiicADeo9M4NQrB5O/ex/zHl9NdYUmA6WU79BE4CEZw+P59e+GUJhVztzHVlFVrtc9Vkr5Bk0EHtRzSBxnXDWUktxK5s5aRWWZJgOlVMenicDD0gbFMunqoZQVVDF31koqSmu8HZJSSjWrxUQgItNEJNy+/ycReU9Ejmr70HxXav8YJv1hGPuKa5j32CpNBkqpDq01JYI/G2P2ich44FTgJeBfbRuW70vpG81kOxnMnbWKihJNBkqpjqk1iaBx2OwZwL+MMfOAgLYLqfNI7hPFlGuGUVFSw5xZKykv1mSglOp4WpMI9orIf4BzgY9FJLCV6ykgqXcUk68dTmVZLXNmrWRfUbW3Q1JKqZ9pzQ/6ucCnwGnGmBIgBri5TaPyIFe19394k3pFMuXa4VTvq2WuJgOlVAfTmkSQBHxkjNkiIhOAacB3La0kIkEi8p2IrBGRdSJyt/18uogsE5EtIvKmiLRZNdPeG/9I5jXXttXmD0m3jEimXDeC6op65jy6krKCKm+HpJRSQOsSwbtAg4j0Bv4LpAOvtWK9GuAkY8wwYDhwmoiMBR4EHjPG9AGKgcsPK/JWCOjdi4qvv6Zm+4622sUhSUyP4Mzrh1NbVc+cWZoMlFIdQ2sSgcsYUw+cBTxujLkBq5TQLGMptx/62zcDnAS8Yz//EjD1kKNupehzz0X8/Sl+9dW22sUhS+gRwZnXj6CuuoE5j66kNL/S2yEppbq41iSCOhGZDlwEfGg/59+ajYuIU0RWA3nA58A2oMROLACZQMpB1r1SRJaLyPL8/PzW7O4X/OLiiDj9dErnzKFh377D2kZbiE8L58wbRlBf62LurFWU5GkyUEp5T2sSwaXAOODvxpgdIpIOvNKajRtjGowxw4FUYAwwoKnFDrLuM8aYUcaYUfHx8a3ZXZOiZ87EVVlJ6XvvHfY22kJ8dzsZ1LmY++hKSnI1GSilvKPFRGCMWW+MudYY87r9eIcx5oFD2Ynd22ghMBaIEhE/+6VUIOvQQj40wYMHETxiBEWvvIpp6FhXEotLDWPqDSNwuQxzZq2kOKfC2yEppbqgNhsPICLxIhJl3w8GJgIbgAXAOfZiFwPz2iqGRjEzZ1C3Zw/lX33V1rs6ZLEpYZx5wwiMyzBn1iqKsjUZKKXaV1sODEsCFojIWuB74HNjzIfArcCNIrIViMXqidSmwk85Bb/ERIpnt6pGq93FJocx9cajEGDurJUUZpW3uI5SSnlKmyUCY8xaY8wIY8xQY8xgY8w99vPbjTFjjDG9jTHTjDFtPu+C+PsTPX06FYsXU7N1a1vv7rDEJIUy9cYRiEOY99gqCjI7TuO2Uqpza83so6NEZI6IrBSRtSLyg32W71Oizp2GBARQ1IG6kh4oulsov7nxKJx+Dt57ZCV71hd5OySlVBfQmhLBq8ALwNnAZGCS/den+MXEEDFpEqVz59FQVubtcA4qKjGEs28ZSURsMB8+uYYNi7O9HZJSqpNrTSLIN8a8b/cW2tV4a/PI2kDMjAsxVVWUvNuxupIeKCw6iLNuOoqUflF8+fIGvvtwB8Y02ctWKaWOWGsSwV9F5DkRmS4iZzXe2jyyNhA0cCDBo0ZS/GrH60p6oIBgP874wzD6H5PE9x/u4MuXN9DQ4PJ2WEqpTqi1A8qGA6dhVQk1Vg/5pJgZM6nLzKR80SJvh9Iip9PBSTP7M2ZyOhuX5PDRk2uorapveUWllDoEfi0vwjBjzJA2j6SdhE88Gb9u3SiaPZvwk07ydjgtEhFGn5FOeEwQC2Zv5L1HVjLpD0MJiw7ydmhKqU6iNSWCpSIysM0jaSfi50f0BRdQuWQpNVu2eDucVus/LolJ1wyjrLCKdx5cQUGmjjVQSnlGaxLBeGC1iGzy5e6j7qKmnYMEBlL0SsftStqU7gNiOOumkQC898gK7V6qlPKI1iSC04A+wK/w4e6j7vyio4mYPInSefNoKC31djiHJC41jHNu1e6lSinPac2kc7uAKH5qKI7y1e6j7mJmzMBUV1PyzrveDuWQafdSpZQntWZk8XVYg8oS7NsrInJNWwfW1oL69ydk9Gif6EralP3dS8d10+6lSqkj0pqqocuBo40xfzHG/AVrKunftm1Y7SP6opnUZWVRvmCBt0M5LE6ng5MuGsDoSdq9VCl1+FqTCARwP2VusJ/zeeEnnoh/cjJFHXRW0tYQEcZMSuekiwawd1MJ7z2ykvLiam+HpZTyIa1JBC8Ay0TkLhG5C1hKO0wd3R7Ez4/oCy+gctkyqjdt8nY4R2TAMUlM+oPVvfTt+5eTtaXE2yEppXxEaxqLZ2GNLi4CioFLjTGPt3Vg7SXq7LORoCCKX/HdUkGj7gNjOPuWkQQE+zHvsVWs+XKPNiIrpVrUbCIQEYeI/GiMWWmM+acx5h/GmFXtFVx7cEZFETllCqXvf0B9cbG3wzlisclhnHPbKHoMieWbt7bw+fPrqav1vcZwpVT7aTYRGGNcwBoRSWuneLwiesaFmJoaSt55x9uheERgsB+//r8hHD0lgy3Lc3n3wRWU5ld6OyylVAfVmjaCJGCdiMwXkfcbb20dWHsK6tuXkLFjKX7tdUx95+h1Iw5h1Ok9mfyHYZQXV/P2/cvZ+UOBt8NSSnVAB00EIhJo370bazTxPcCjbrdOJWbmDOqzs9k3/0tvh+JRaYNiOfeO0YTHBvHR02v5/qMdGJe2GyilftJciWCJ/fcKY8yiA2/tEVx7CpswAf+UFIpnz/Z2KB4XERfMWTePpN+Ybnz3wQ4+/tdaairrvB2WUqqDaC4RBIjIxcAx7hek8eUL0zRHnE6iL7yQyuXLqd6wwdvheJx/gJOTLxnA8ef3Zfe6It66fzmFe3UGU6VU84ngd1ijiN3nGfL5C9M0J+rss5DgYIo6QVfSpogIQyakMvXGEdTXNvDOg8vZ/H2Ot8NSSnmZtNTPXEQuN8Z4dQDZqFGjzPLly9tlX9l33UXpe3PovWghftHR7bJPb6goreHTZ38ke2spw07uzrizeuF0tqbvgFLKV4jICmPMqJaWa82Ask4xiri1YmbMwNTWUvLW294OpU2FRgZy5g0jGHpiKmvm7+H9x1dTWVbr7bCUUl6gp4AHCOzdm9BjjqH49dcxdZ27QdXpdHDceX2ZeOlA8naW8dbfvyNnu29dn0EpdeQ0ETQheuYM6nNy2Dd/vrdDaRf9ju7G2beOxOnvYM4jK1n+8U5c2sVUqS6jVYlARFJE5BgROb7x1taBeVPYCSfgn5ZG0Usvd5m5euJSwzn3jtFkHBXPsve3M3fWSsoKqrwdllKqHbTmwjQPAt8CfwJutm83tXFcXiUOBzGXXEzVqlWUvPGGt8NpN4Eh/vzq8kFMvGQABZnlvHnvd2xapr2KlOrs/FqxzFSgnzGmpq2D6Uiizz+f8kWLyL3vfoIGDyF4yGBvh9QuRIR+Y5NI6h3FFy+s54sX1rPrx0JOmN6XwBB/b4enlGoDraka2g50uV8AcThIfuABnHFx7L3+ep+7yP2RiogLZuqNIzh6SjpbV+Txxr3fkbXF92dnVUr9UmsSQSWwWkT+IyL/bLy1dWAdgV90NKmPzaIuL4+sO+7sMu0FjRxOB6NOT+esm4/C6XQwZ9YqlszdRkO9XhtZqc6kNYngfeBvwGJghdutSwgePpzEm2+ifP58ip5/wdvheEW39EjOvXM0A45JYuX/dvHuQysozqnwdlhKKQ9pcWQxgIgEAH3th5uMMe3awb49RxY3xRjD3uuuZ9/8+fSY/TIhRx3ltVi8bduqPBa8spGGOhfjp/Vh4PhkRDrFJayV6nRaO7K4NVNMTABeAnZiXbS+O3CxMearIw+zdbydCAAa9u1jxznnYKprSJ/zHn4xMV6Nx5sqSmr44sX1ZG4sJn1YHCfO6E9weIC3w1JKHcBjU0xgXXvgV8aYE4wxxwOnAo8daYC+xhkeTurjj9NQXEzWTTdjGrru5R9DowKZcu1wjj2nN7vWFfLG375j17pCb4ellDpMrUkE/saYTY0PjDGb6YK9iACCBgwg8c9/omLxYgr+/W9vh+NV4hCGT0xj2m2jCQrz58Mn1vDVm5upq+m6CVIpX9WaRLBcRP4rIhPs27N0ocbiA0Wdcw6RZ06h4MmnqFi82NvheF1cahjTbh/F0BNT+WFBJq/fs4zd67V0oJQvaU0bQSBwNTAeq43gK+Dp9hxg1hHaCNy5KivZed551BcWkT7nPfwTE70dUoeQtaWYBa9soiS3kr5HJzJ+Wh+Cw7TtQClv8Vhj8REE0B14GegGuIBnjDH/EJEY4E2gJ1YD9LnGmGZHKnW0RABQs20bO6adS9CAAfR46UXErzWDtDu/+roGVnyyi5Wf7iIgyI/x03rT9+hu2rNIKS844sZiEXnL/vuDiKw98NaKGOqBPxpjBmBd6exqERkI3AbMN8b0Aebbj31OYK9eJN19N1UrVpD/+OPeDqfD8PN3cvSUDM69czSRCcF88eIGPnhijU5gp1QHdtASgYgkGWOyRaRHU68bY3Yd0o5E5gFP2rcJ9raTgIXGmH7NrdsRSwSNsu+6i5I33iT16acIP+kkb4fTobhchh8X7WXp3G0YYxgzOYNhJ6Xi0CuhKdUuPDmO4EFjzK0tPdfCNnpitS0MBnYbY6LcXis2xvzimpAiciVwJUBaWtrIXbsOKe+0G1dNDbumX0BtZibp771HQGqKt0PqcPYVVfPVG5vZubaA+LRwTpzRn/i0cG+HpVSn58lxBKc08dyvDyGQMOBd4HpjTFlr1zPGPGOMGWWMGRUfH9/a1dqdIzCQlH88Dsaw9/rrcdXq5R4PFB4TxOlXDeHU3w6mvKSGtx9YzuL3tlJXq11NleoImmsjuEpEfgD6HdA+sANoTRsBIuKPlQReNca8Zz+da1cJYf/NO7K34H0B3buTfP99VP/4I3kPPOjtcDokEaH3yAQu+OvRDBjXjVWf7eaNe5axZ2ORt0NTqstrrkTwGjAZa9K5yW63kcaYGS1tWKxuIv8FNhhjZrm99D5wsX3/YmDeYcTd4YRPnEjMpZdS/NprlH38sbfD6bCCQv05ceYApt4wAnEI7z++mvkvrqe6vHNfH1qpjqzV3UdFJAEIanxsjNndwvLjga+BH7C6jwLcASwD3gLSgN3ANGNMs6eFHbmx2J2pq2PXRRdTs2kTPd95h8CMdG+H1KHV1zWw/OOdrPp0N4Ghfoyd2osB45IQh3Y1VcoTPNlYPBmYBSRjVeP0wDrLH+SJQFvDVxIBQF1ODjt+cxZ+cXH0fPMNHCEh3g6pwyvcW87CVzeRs72U+LRwxk/rQ3KfqJZXVEo1y5ONxfdijQPYbIxJB07GuoaxaoJ/t24kP/wwNdu2kXnDDZg6rfJoSWxKGGfdfBSnXD6Qqn21zHl0JZ8++6OOPVCqnbQmEdQZYwoBh4g4jDELgOFtHJdPCxt/LN3+8hcqFn1F9l/v6nJXNjscIkLf0d244O6xjJ6Uzs61Bbx21zKWzttGbXW9t8NTqlNrzbwIJXa08eYbAAAgAElEQVQX0K+AV0UkD2vUsGpG9PnnUZ+fT8FTT+GXEE/C9dd7OySf4B/gZMykdAYck8SSOdtY8ckuNi7OZuxvetFvTDdtP1CqDbSmjSAUqMaacO5CIBKrO2i7TTHpS20E7owx5Pzlr5S8/TaJf/kzMRdc4O2QfE7O9lK+fnMzebv2kdAzguPO7UO3jEhvh6WUT/D6pHOe5KuJAMDU15N5zbWUL1xIyj8eJ+JXv/J2SD7HuAybvsthyZxtVJbW0md0IuN+04vwmKCWV1aqCzviRCAi3xhjxovIPsB9IQGMMSbCM6G2zJcTAYCrqordl15G9fr1pP33OUJGj/Z2SD6ptrqeVZ/tZtXnuxFgxK/SGHFqD/wDnN4OTakOSUsEHUx9cTG7LpxBfX4+PV55haB+fb0dks8qK6hi8Xvb2LYyj7DoQMb9phd9RifqVNdKHcBj3UdF5B8iMs4zYbW/elfHaNf2i44m7dlncAQHs+fKK6nLyvJ2SD4rIi6Y064czG/+OIKgMH8+f349b9+/nF3rCrWHllKHoTXdR1cCfxaRrSLysIi0mF06irsW38XNi272dhj7+aek0P3ZZ3FVVLD7t1fSUFLi7ZB8WnKfaKbdPpqTLhpAdXkdHz6xhjmPrmTv5mavc6SUOkCLicAY85Ix5nRgDLAZeFBEtrR5ZB6QGJLIF7u/YF3hOm+Hsl9Qv76kPvUUdbt3s+f3V+OqrvZ2SD7N4RAGHJPEhfeM5fjz+1KaX8XcWat4/x+ryNlR6u3wlPIJh3KFkN5Af6xLTG5sk2g8bMbAGUQERPD06qe9HcrPhB49huSHH6Jq1Sr2/vEmTH3HqL7yZU4/B0MmpDLzb+M45uze5O8p590HV/DR02spyNzn7fCU6tBa00bQWAK4B/gRa/bRyW0emQeEB4Rz6eBL+SrzK9bkr/F2OD8TcdppJN5xB+Xz55Nzz9+0bttD/AKcjDgljZn3juPoKRlkbSnhzXu/59Nnf6Q4p8Lb4SnVIbVmQNnvgHeMMQXtE9IvHUmvocq6Sk579zQGxA7gP6f8x8ORHbm8WY9R+MwzxF3zB+Kvvtrb4XQ61RV1rP5iN2u+zKShtoF+R3dj1BnpRMYHezs0pdqcJyedewY4TUT+Ym84TUTGHGmA7SXEP4TLBl/G4qzFrMxd6e1wfiH+huuJnDqVgieepPjtt70dTqcTFOrP2DN7cdG94xh2cne2rMjjtb8uZeFrmygvrvF2eEp1CK0pEfwL63oCJxljBohINPCZMabdRkUd6TiCqvoqTn/vdNIj03n+1Oc9GJlnmLo69vz+aiq+/ZbUJ58g/KSTvB1Sp1VeXMOK/+1k/TdZiAiDT0jhqFN7EBIR4O3QlPI4T5YIjjbGXI013xDGmGLAp/5rgv2CuWLIFXyf8z3Lspd5O5xfEH9/Uh9/jKBBg9h7w41Urlzl7ZA6rbDoQE6Y3o8L7x5L3zGJrP1yDy/fuZhFr2+iNF+nvVZdU6umoRYRJ/Y0EyISz09XHPMZ5/Q9h4SQBJ5a/VSHbJh1hIbS/T//xq9bIplXXUX15s3eDqlTi4gL5qSLBnDBXWPpNyaR9d9m8epflvDZcz+Sv0d7GamupTWJ4J/AHCBBRP4OfAPc16ZRtYFAZyBXDrmSVXmrWJy12NvhNMkvJoa0555DAgLYNWMmld9/7+2QOr2oxBBOnDmAi+49huET09j5YyFv/f17PvjnajI3FXfIkwalPK1Vcw2JSH+sK5MJMN8Ys6GtA3PnqbmG6hrqOGPOGcQGxfLaGa912LlpajP3WtNQ7NlD8sMPEXHaad4Oqcuoqazjx6/2subLTKrKaknoEc5Rp/YgfXg8Dr0WgvIxnph9NKa5FVu64LwneXLSuXc3v8tdS+7iyZOe5ITuJ3hkm22hoaSEPb+/mqpVq0i87VZiLr7Y2yF1KfV1DWxcksOqz3dTll9FVGIIwyd2p//YJJz+hzIOUynv8UQi2IHVLiBAGlBs348CdtvXL24XnkwEda46psyZQnhAOG9OerPDlgoAXNXVZN18C/s+/5yYiy8m4dZbEIf+CLUnl8uwfVU+Kz/dRf7ufYREBjDspO4MOj6FwODWXOBPKe854l5Dxph0Y0wG8Ckw2RgTZ4yJBSYB73ku1Pbl7/DnquFXsaFoA/N3z/d2OM1yBAWR8vhjRM+YQdFLL7H3j3/EVVvr7bC6FIdD6D0ygWm3j2LKdcOJSQplyZxtvHz7tyyZs5WKUh2LoHxfa8YRrDDGjDzgueWtyTKe4unrEdS76vnNvN/g5/Dj3Snv4pCOfZZtjKHo+efJe/gRQkaPJvXJJ3BG6uUavSVvVxkrP93N9lV5iEPodVQCQyak0i0jokOXMFXX48lxBAUi8icR6SkiPUTkTqDdrlfcFvwcflw17Cq2lmzls52feTucFokIsZdfTvLDD1O5ejW7ZsygLjvb22F1WQk9IjjtysFccPdYBh+fwq4fCnjv4RW8dd/3rP82i7raBm+HqNQhaU2JIAb4K3A8VpvBV8A9vtpY3MhlXJz9/tk0mAbmTJmD0+EblzusWLqUzD9cgyMkhO7PPkNQv37eDqnLq62uZ/N3ufywMJOirAoCQ/zof0wSQ05IITI+xNvhqS5ML1XZCp/v+pwbF97IfePvY3Ivn5hQFYDqTZvYc+X/4aqoIPXJJwgdO9bbISmsKrzsrSWsXbCX7avzMcaQNjCWIRNS6DEoFtHup6qdaSJoBZdxce4H51JZX8n7U9/Hz+E7vUDqsrPZc+WV1OzcRfJ99xE5eZK3Q1JuKkpqWPf1XtZ9nUVlWS0RcUEMPj6VAccmERTq7+3wVBfhyTaCTsshDq4efjV79u3hg20feDucQ+KflESPV18lZPhwsm6+mcLnntNRsB1IaFQgYyZncNF9x/CrKwYRGhXI4ve28uJt3/LlyxvI363TWKiOo0uXCMAqzl/w0QUUVRfx4W8+xN/pW2drrtpasm69lX2f/I/oCy8k8Y7bEadvtHd0NQWZ+/hh0V42L8uhvtZFYnoEA49NpvfIBAJ0TIJqAx4rEYhIhoh8ICIFIpInIvNEJMMzYXqfiHD1iKvJqshiztY53g7nkDkCAkh59FFiLrmE4ldfZe/11+t1kDuouNRwTrywP5c8cCzjp/WhprKeBa9s5IVbv+GLF9Zbcxu5Ov6Jmep8WtNraCnwFPC6/dT5wDXGmKPbOLb92rJEAFapYOYnM8mpyOGjsz4i0BnYZvtqS0UvvUTuAw8SNGAAyY88QmBGuw3+VofBGEPujjI2LMlm6/e51FY3EB4bRP+x3eg/LomIOL2KmjoyHmssFpFlB/7oi8hSY0y7dVVp60QAsDR7Kb/97LfcNuY2LhxwYZvuqy3t+/JLsm+/A1dtLYm330bUtGk6yMkH1NU2sH1VPhuXZJO5qRgMpPSLYsC4JDJGJOAfqNV96tB5MhE8AJQAb2CNIzgPCMQqJbTL5HPtkQiMMVz26WXsLNvJx2d9TLCf756N1eXmkX37bVQsXkLYxJNJ+tvf8IuO9nZYqpXKCqvYtDSHjUuyKSuoxj/ISe+RCQwYl0S3XpGa2FWreTIR7GjmZWPPR9Sm2iMRACzPWc6ln17KTaNu4uJBvj3bp3G5KHrpZfJnzcIZFUXSA/cTduyx3g5LHQLjMmRtLWHjkmy2rsynvqaByIRg+o9Lov/YboRFB3k7RNXB6TiCw/Tbz37L5uLNfHLWJ4T4+/6o0OoNG9h7083UbttGzCWXEH/jDTgCfOpKowpr9PK2lXlsWJxN9tZSRCC5bxS9RybS66h4gsP0O1W/5MkSQRDwe2A8VtXQ18C/jTHt1jWlPRPBmvw1zPh4BtcddR1XDLmiXfbZ1lxVVeQ9/DDFr71OYP/+pDzyMIG9e3s7LHWYSvIq2bQ0h60r8ijJrUQcQvf+0fQelUD6sHgdsKb282QieAvYB7xiPzUdiDbGTDviKFupPRMBwO+/+D1rC9byv7P+R1hAWLvtt63tW7CA7Dv/hKuigoRbbyF6+nStb/ZhxhgK9pSzdUUuW5bnsa+wGodTSBsYQ+9RiaQPjdPxCV2cJxPBGmPMsJaea0uHnQhWvw6VBXDMNYe02rqCdZz/0flcPfxqfjfsd4e+3w6sPj+frDvupOLrrwmbMIGkv9+LX2yst8NSR8gYQ97OfWxZkcu2FXmUF9fg9HPQY3AsvUcl0HNInPY86oI8mQhexKoKWmo/Phq42Bjz+xbWex7rIjZ5xpjB9nMxwJtAT2AncK4xprilIA87Ebx7BaybC7/7BhL6H9Kq1355Ld/nfM8bk96gR0SPQ993B2ZcLopfeZW8Rx7BERFB8v33EXbccd4OS3mIcRlytpeyZUUe21bkUVlWi1+Ag55D4+gzMpG0wTH4+WtS6Ao8canKH7DaBPyBfsBu+3EPYH3jj3szARwPlAMvuyWCh4AiY8wDInIbVhXTrS0FediJoDwfnhoNcf3g0k/gEC7zmLkvkws+uoDIwEheOf0VIgM734VgqjdtJuumm6jZsoXomTNJuOmPOAJ9czCdaprLZcjaUsLW5blsW5VPdXkd/kFOeg6JI31oHGmDY/WSm52YJxJBs6fBxphdrQiiJ/ChWyLYBEwwxmSLSBKw0BjT4oT6R9RGsOpVmPd7mPQYjLrskFZdkbuCKz67glGJo3h64tP4OzpfI5yrpoa8Rx6lePZsAvv0IfmRh/UaB52Uq8FF5qZiti7PY8faAqrL63A4hOS+UaQPiyd9WBzhMdoltTPpEN1Hm0gEJcaYKLfXi40xTY50EpErgSsB0tLSRu7a1WLeaZox8NJkyF4DV38HEUmHtPrcrXP587d/5rx+5/GnsX86vBh8QPlXX5F1x500lJQQPX068Vf/HmdUVMsrKp/kchlyt5eyY00BO9YWUJJbCUBc9zB6Do0jY1g8cd3DtDOBj/P5RODuiHsNFW6Dp8dBv9Pg3JcPefVZy2fxwroXuOPoO5jef/rhx9HB1RcXk//4Pyh5+22c4eHEXXMN0eedi/h3vpKQ+rninAp2rC1g55oCsreXgoGw6EB6DrWqkFL6RuP079Kz1vukjpoI2r9qqNFXj8CXf4PzX4f+px/Sqg2uBq5feD1fZ37N0yc/zTEpxxxZLB1c9aZN5N53P5XLlhHQqxeJt91G2HHjvR2WaidV+2rZ+UMBO9YUsGdDEfW1LvyDnKQNjCV9WBw9BsfqWAUf0VETwcNAoVtjcYwx5paWtuORRFBfC8+cAFUlcPUyCIo4pNUr6yqZ+clMssuzeeX0V8iI6jQzcTfJGEP5l1+S++BD1O3eTegJx5N4660EZnTu961+rr62gcyNxexYk8+OHwqpKqtFBBJ6RtB9YAxpA2NJ7BmOw6mlhY7I64lARF4HJgBxQC7wV2Au8BaQhtULaVprJq3z2ICyPd/Df0+BMVfC6Q8d8urZ5dmc/9H5hPqH8trprxEV1Pnr0F21tRTPfoWCf/0LV3W1th90YcZlyN1Zxq51hexZX0TezjKMgYBgP1L7R5M2MIbuA2OIiPXdCRs7G68nAk/y6Mjij2+G756FK76A1BY/n19Ynbeayz+9nKHxQ3nmlGd87opmh6u+sJD8fz7xU/vBtdcQfd55iJ92Peyqqivq2LOhyLqtL6K8uAaAqMQQu7QQQ0rfaB3I5kWaCA6mugyeOhqCo+H/FsFh/JB/uP1Dbv/6ds7qcxZ3jburS/Ws+Fn7Qe9eJN6q7QfKqkoszq5k9/pC9mwoYu/mEhrqXDj8hKReUftLC3EpYYij6/y/eJsmguZs/AjeuABO/iscd+NhbeKJVU/wzNpnOsWU1YdK2w9US+rrGsjeUro/MRTurQAgONyflL7RJPeJIqVvNNFJIV3qRKq9aSJoyZszYMvncNViiO11yKu7jIubFt3EF7u+4ImTnuCE7id4Nj4f8Iv2g/PPJ/a3V+CfmOjt0FQHU1FSw+71RWRutEoLFSVWNVJwuD/JfaJJ6RtFct8oYpJCNTF4kCaClpRlw1NjIHkEXDQPDuPgq6qv4pL/XcLO0p3MPn02faP7ejZGH1FfWEj+P/5JyTvvgNNJ5KRJxF52KYF9+ng7NNUBGWMoK6hi7+YSsjaXsHdz8f72BSsxRO0vNcQkhWpV0hHQRNAa3/8XProRpv4Lhl9wWJvIrchl+kfT8Xf489oZrxEb3HVn8qzNzKToxZcoefddTFUVYSecQMzllxEyerSe5amDshJDNXs3F5O1pYS9m35KDEFh/qT0sUoLKX2jNTEcIk0EwMJNeeTvq2HaqO5NL+BywQunQcFm+MNyCI07rPjWFazjkv9dQv+Y/jx36nMEOrv2xG31xcUUv/46xa+8SkNREUFDhxJ7+eWETzwZcWoPEtU8Ywz7Cu3EsLmEzM3FlBdZiSEg2I/E9Ai6ZUTSLSOCxPRInTSvGV0+ERhjuPyl5XyzpYB3rhrH0NSD9HvP2wD/Pg4GnwVnPXPYMX6681NuWnQTkzMm8/fxf9czYMBVXU3p3LkUPv8Cdbt3498jjdhLLyVy6lQcQTq5mWq9soIqsraUkLO9lJztZRRmlVtzIQvEJIXaicFKDlGJ2gDdqMsnAoDiilomPfENAB9eM57o0INc1/XLv8NXD8GM96D3yYcd57/X/JunVj/VqS5z6QmmoYF9X8yn8LnnqP7hB5wxMUTPuJDo6dPxi25xqimlfqG2qp7cnWV2Yigld0cZNZX1AASF+pOYEUG39Ei69YokoUc4AUFds9SgicC2Zk8J0/69hGN6x/L8xaNxNFW/WFcN/z4WGurg90sh4PAuWm+M4davb+WTHZ/w+ITHObnH4SeVzsgYQ+X331P03+cpX7QICQ4m6uyzibnkEgJSU7wdnvJhxmUozqkkZ0cpOdus5FCcY82oKgKxqWEk9owgoUcE8WnhxKSE4uwC02JoInAze+ku/jz3R/54Sl+uOfkgPVl2fgMvngHHXgen3HPY+6qur+byTy9nS8kW7ht/HxN7TDzsbXVmNVu2UPj8C5R++CG4XESceipR551HyOhRyCFcQEipg6muqCN3x0+lhvzd+/aXGpx+DmJTw0hICye+RzgJPSKISQrpdHMmaSJwY4zhhjdXM29NFrMvO5rxfQ7SKDzvD7D6NbhyISQNPez9FVQVcPX8q1lfuJ5pfadx8+ibCfbT+VeaUpebS9HLL1Py5lu4ysvxT04m4swpRJ15JgE9e3o7PNWJNHZbzdu1j7xd+8jfVUb+7n3UVjcA4PR3EJcaRkKPCBJ6hBOfFk50UmjTtQg+QhPBASpr65n61LcUlNfy0bXjSYps4oe5qhieHAORKXDFfHAcfg+XuoY6nlj1BC+se4Fekb148PgH6RejV/46GFdVFfu+mE/p3LlULFkCLhfBI0YQeeaZRJz+a5wRhzZbrFKtYVyG0vwq8naV2QmijPw95dTXWMnBL8BBfPdw4rqHE5caRmxqGDHJofgH+EbvN00ETdiWX86UJ76hX7dw3rhyHAF+TRQDf3wX3rkMTnsAxl51xPtcnLWYO7+5k7KaMm4cdSMX9L9AezS0oC43l7IPPqBk7lxqt25DAgIIO/kkIs88k7Dx43WiO9WmXC5DSW4l+fuTwz4K9v6UHEQgMiGE2JQw4lLD9ieIsOjADve/rYngID5am83Vr63k0mN78tfJg365gDHw2rmw81u4eilEpR3xPgurCvnzt3/m671fc0LqCdxz7D3EBMUc8XY7O2MM1evWUzp3LmUffkhDSQnOuDgiJ00icuqZBPXv7+0QVRdhXIbSgioK95ZTkFlOYWY5hXvLKSuo3r9MYIgfsSlWUmhMEDFJofh5sfSgiaAZd3+wjhe+3cmTF4xg0tDkXy5QstuaobTHMXDBW0dURdTIGMOrG15l1opZRAVGcd9x9zE2aewRb7erMLW1lH/9NaVz57Jv4SKoqyOwf38ip55J5KRJ+MUd3mBApY5ETVU9RXZyKNhrJ4isil+UHmKSQolOavwbSnRiSLskCE0Ezaitd3H+M0vYlLOPeX8YT++EsF8u9N2z8PFNMGAynPUc+HtmANTGoo3c8tUt7CzdyaWDL+UPI/6Av6NrXNPAU+qLiyn7+GNK586j+ocfwOkkZPRowk+cQNiECQT06OHtEFUXtr/0kGmXHvaWU5xTSWl+FcZl/d6KQERcMNFJocQkhRKTFGIliG6hHr1+gyaCFmSXVnHGP78hNjSAuVcfS2hgE/XOS/8F/7sNeoyH6a9BUKRH9l1ZV8lD3z/Eu1veZXDsYB46/iG6RxxkGgzVrJpt2yid9z7lC76kZstWAALS0wmbMIGwEycQMmIE4q+JVnlfQ52LkrxKirIrKM6uoCi7kuKcCkpyK3E1/PQ7HB4btL/kEJMUQvqw+MO+RrQmglb4ZksBM59fxpRhyTx+3vCmG3rWvg1zfwfxA2DGOxDezWP7/2znZ9y15C4aXA38aeyfmNxrsse23RXVZmZSvmAh5QsXUvndd5i6OhwREYSNH0/YiScSdtx4vcSm6nAaGlyU5Vf9LEEUZVdQklNJQ72LC+8eS1Ti4Q1y1UTQSk9+uYVHPtvM384cxMxxPZteaOt8eHOmNSndzDmHdf2Cg8kuz+a2r29jZd5KJmVM4s6j7yQsoImqKnVIGsorqFj8LeULF1G+aBENhYXgcBB81AjCJ0wg7MQTCcjI6HC9PJRq5HJZ4x4i4oIPeyyDJoJWcrkMV7y8nK+35PP2745hePeDnDFmroBXzwFxwIx3IXm4x2Kod9Xz7A/P8u81/yY5NJmHjn+IIfFDPLb9rs64XFT/+CP7FiygfOEiajZsAMC/e3erCmn8sQQfdRTO8HAvR6qUZ2kiOAQlldbkdMa0MDldwRaY/Rtr4Nn5r0LGBI/GsTJ3Jbd9fRv5lfmc1ecsZgycQXpkukf3oaAuJ8cqKSxYQMXSpZiaGnA4COzXj5BRowgZOZKQUSO1J5LyeZoIDtHazBLO+dcSxvWK5YVLDjI5HUBZFrxyNhRuhd/8x5q+2oNKa0p5fOXjvL/1fWpdtRyXchwzB85kbNJYrcZoA66qKqrWrKHy++VUrlhB1erVmGqrb3hAz56EjB5F8MiRhIwajX9Ksn4HyqdoIjgMry7bxZ1zfuSGiX25bmIzl1msKobXp8PupXD6wzDmtx6PpbCqkLc2vcUbm96gqLqIPtF9mDlgJqdnnN7lL3zTlkxtLdXr11O5YoWVHFauxFVWBoBft25WiWHUSEJGjSKgVy9NDKpD00RwGIwx/PGtNcxZvZeXLh3D8X3jD75wXZU1FcWmj+H4W+DEOw7rusctqWmo4ePtHzN7w2y2FG8hJiiG8/udz7n9zu3Sl8VsL8blombLFiqXL6fKTg71+fkAOKOiCB4xgqBBgwgaOICggQPxS0zU5KA6DE0Eh6mqtoGpT31L3r5qPrr2OJKjmpk1tKEePrwOVr0CIy+BM2Z5ZBRyU4wxLMtZxuz1s/kq8ysCHAGckXEGMwbOoG903zbZp/olYwx1e/b8rCqpdscOa2oSwBkTQ9AAKyk0Jgf/7t11am3lFZoIjsD2/HKmPPkt6XGhPHPRyKZnKm1kDMy/B76ZBf0nwdn/9dgo5IPZUbqDVze8yryt86huqGZs0lhmDpzJ+JTxOER/cNqbq6KC6k2bqd6wnur166lev4GarVuhrg4AR2goQQMGEDiwMUEMJDAjQyfPU21OE8ER+mJ9Lte8vgo/p/CXSQM5Z2Rq80X+NhqF3JyS6hLe2fIOr294nbyqPHpG9GTmwJlMyphEiP/hDUBRnuGqraVmyxaq16+nZsMGqtetp3rTpv0N0RIYSGDfvgT26kVARgaBGekEZGQQ0L27joRWHqOJwAN2FVZw89tr+W5nESf1T+D+s4aQGNHM2f4P78Cc30F8f4+PQm5OnauOz3Z+xuz1s1lXuA4/hx/D44czLnkc45LGMTB2IM42qrJSrWfq66nduXN/qaF640Zqt2+nPi/vp4X8/AhISyMgI53A9IyfJQkd56AOlSYCD3G5DC8u3slDn24kwOngrimD+M2IlIOXDhpHIYfEwvjrYOBUa0RyOzDGsCZ/DQv2LGBJ1hI2FFkDpyICIjg66WjGJY/jmORjSAnT6wN3JA3l5dTu2EHt9u3UbNtO7Y7t1GzfQe2uXVBfv385Z3yclRx6ZRCYno5/9+4EpKbin5yMIzTUi+9AdVSaCDxse345N7+zlhW7ipk4IJH7zhpMQvhBSgd7V8DcqyF/A4jTGng25Bzof0a7VBk1KqouYln2MhZnLWZJ1hJyK3MBSAtPs0oLyeMY020M4QF6ptkRmbo6ajMzf0oS2xv/bt/fpbWRMzoa/9RU/FNSCEhNwT8lZf9j/+RkHEFt226lOiZNBG2gwWV44dsdPPTpJkICnNw9ZRBThh1kkJExkLsOfnzHuupZyW5wBkKfU6yk0OdUCGi/enxjDDvKdrAkawlLspbwXc53VNVX4RQng+MGc0zyMYxLHsfguME6LXYHZ4yhoaiIusxMajMzqdubRV1mJnV79+6/GbuhupEzPo6AZLfkkNQNv8RE/OIT8EtIwC8uFnFq9WFno4mgDW3NK+emt9ewek8Jpw5K5N6pQ4gPb2aQlzGQudxKCuvmQHkuBIRBv9OtpJBxIvgdZFqLNlLXUMea/DUsybYSw7rCdbiMiwBHAOmR6fSK6kXvqN77/6aEpWg7g48wLhf1+QXU7bWTQ2YmtY1JInMvddnZP6tyAsDhwC8uzkoKiYn4JcTjn5CAX0Ki9VxCAn4J8TijonSchA/RRNDGGlyGZ7/ezqzPNhMa6ORvUwc3fbWzA7kaYOc3VlJY/z5Ul0BwNAyYYiWFHse22ViE5pTWlLIsexk/FPzA1pKtbCvZRnZF9v7XA52BZERm0Cuq18+SREpYinZZ9TGmoYH6wkLqc/Ooz8+jPi+Putxc6vPyqM/Lp0ne77kAABCjSURBVN6+31BS8ot1JSAAv7g4nLGxOGOi8YuOwRkbg19MDM7oGOu52Fic0TH4xUTjCNHea96kiaCdbMndx01vr2FNZilnDEninjMHERvWyikg6mth25dWUtj4MdRVQFg3GDQVuo+B2D4Q27tdq5DcVdRVsK1kG9tKtu1PDltKtpBX+VMvl2C/YNIj0+kd1Zv0yHQSQxKtW2giCSEJBPs1MwZDdWiumhrq8/PtBPFTwmgoKKC+qJiGwkLqi62/pra2yW1IcDB+0dE4Y+yEERWNMyoSR0QEzohInFGROCMicEZG4oiIxBkZgTMiQrvQeogmgnZU3+DiP1/9f3vnHytpddbxz/d959e9e3+xu7BLgVrAtVFRKCWIaBuSWgSipTXVYLQSMSENJbGNbcQQGzQmtrYatT9sacVWU1usiG5aEKilaWOE0q5AQVp22S50y7K/mbm/Z+Y9j3+cM3Pnzs5c7t29M9O9cz7Jm3PO8zznPc+c98cz57wz593LX3/lWSZKef7srRdx7c+cvbadVOfg2f/0zxN2PwhZy4U1cS5s/XEfFLbsCPkdMHkeDOAfq5Vqhb0v720Gh0Z6eP7wCbbjhXG2jfqg0Njay5tLm+Oo4jTGzHCzc2THj5EdO0b96DGy48eoHztG1syHwPHycVy5gpudXXGfyegoyeQk6WQjUEz44DE2TjI+TjK2iXRsjGRsjGTT2FJ5fNzLRkfjv7mJgWAgfO+laf7gi4/z1A8rXHvRdq68cAvbJkpsnyyxfaLElrEi6WpeMFGbh6PPwdHdcGRPSHf7FU8XW34tkivB5gv9i3K27ghBYgdMvMpPN+X7+218tjbLwbmDHJo71NwOzi4vH1k4gjO3rF4uyXHmyJlMFaeYKE4wUfDbZHHS54sTTBYml6UThQnG8mNxvvo0xWo1sulpsnIZVy6TVSpk5QpZuUxWKeOa+Uool8nKFdzMDG5ublVtJJs2+aAwFgLFpk1oZNQHmZERn476VKOjJA1dkDVs1MgXi5DPn1bnXAwEA6KWOT7xtef46MN7WKwvv+GliThzrMi2yRLbJ4psnyixbbLEtnEfLBpBY6zT+5PBP3SePRyCQktwOLIbju8Dy5bbp0UfEEbOgJEpn5amVpBNQXHCL5GRG4F0/ZdAqLs6R+ePLgWKEDgOzx+mvFimvFimUq1QqVYoL5apuVrXfaVKGS+MM1GYYFN+EyO5EUbzoz7NjS4rr6hLRyikBYppsZnGB+M/uliW4ebmcNPTZDMzuJlZ3OwMbmbGl6d93s3OLOmnp32d+fllqa0yqDRJU5JiEYXA0D0tkRRLqFQiKZVQoYCKRVQseH3B51UI5SBLisEu2CeFAhoZOenRzY90IJB0DfA3QAp82sw+sJL96RQIGmTOODqzyEuVBV4qL3CwssDBii8fbJFVFuon1N1USBkr5RjJp5TC5vMJI4WUUi6lFNKRQkIplzKac5xZO8CWxRcYqx2jWC9TrJUp1irkaxUK1ZfJVSvkq2XSapm0tvLQHMCSnB91NLb8CORLKDeyFCzybfokB2kekjykBR9MknyQ5YIs32YXNqVenqSQpBgJCzgq2QLl+jyV+hzl+hyVsJVrM1Rqs1Rq08zVF5irLzCfLTBXn2O+HtLaPFXXef56JXLKkU/zy4JDa76ZJgVySY58ku+cpvnmvpppiz6X5MgpR6qUNEl9PknJJV7WSDvpUqUkSnyaJOSUWyorIVFyWn17HQTmHLawsDxItGzWDBwL2MI8bmHR2y8srC5dXGwuK3KyXPDlL1G88ORej7vaQND3Va8kpcDHgDcD+4HHJO00s//rty+9JE3EWRMlzpoo8bPndrebq9Z9gCgvcGi6ESAWmV2ss1DPmK9mzNcyFmuOIzNVFmq+vFDLWKg55msZmWsN5lvCtjJ56kwyy6RmmGSWqZCOa44iNUpUKalKqbqUL1KlSI0RzVGiTElVRvByr6+RIyNHRp4TA9xaETAStm0nUd8hjISaEmaVMpemzCYp80qYS1LmkoTZJGFRYlEJ1URUEYuJqKrOojKqWqQqqEohhSowIzgWyhlQF9Qx6kBdIcWoD/g+nCBSRIJIJFKSZj4JckkkJKQhn5IEWcPOB5XlZTVljfoKMr+fEIgadUI5adomSz4ogeb+GgGM5j58cEsg2KZtepGQJI22wqcK+1PYGn42ymppVy0+SQnKC00mJFNLfolRpNFmXYUgq5b2JIX9pmG/wdZAmUO1jKSWobAl1TrUaqiekVQzVKuhhqxaR9UaVGvUp8bp9RtIBrH84eXAHjPbCyDpC8D1wIYKBKtltJDj/K05zt968ksE1DK3FByqjmrmqDtHPTMyZ8vyNWdkoVx3fsuco9a0NZzzeWe+XDbjuDMyB5kFvS3ZZWaY0azjzHCZYVZHrkbi6pDVkNVJnJfJ1UisjlydxGooqyFzyOrIHFhGYtkymS/7bSnv5QnBFhdkjoQMzJE0ZPWQ4u0aNjkz8jgSrEVv3gYjbYYUI8EtK6dq2C7pk2bZt2NAJsPkyGQ4jEwOEzgMS4wMsKBzQe5kzbouBJxWma8DLtQ1oC7hgEw+EGaNeiHvEHXh94FCW16+lAfX2E9L3suDbTPfCLgEH0M+lO2EfS/ZGsv1sNS+oaXP1uKTtZRtI492Uprfgj61/1Ku2HJtT5sbRCA4B/hBS3k/8HPtRpJuBm4GePWrX90fz05T8mlCPk2YKMWf3K03ZoYzmgHOzD+qcRZuyM7AwPB2DXvjRFsXRm6N/TTk1thvuy4M9FwHvTXrLm8TZ5g5zDLMWZA5LARXMzCXhbJh5oOfeYVPMZxzYOE27AzDgXPhs3qduXBbbtb3t+hmvlE/tEOjzSBTS3sNudr2I/DPvsLnbOjCwQmfw+HMBb+8r2YuHAPz4zSDEHaDvuGHC/2YAY0+9/tx2NJ+QgiyEOQttIMtaWixae6/IQsHs92uXbe8jpeevfnkpoXWwiACQacwfsKDCjO7E7gT/DOCXjsViXRCEqkg7XjaRiIbg0H80HY/cF5L+VzgxQH4EYlEIhEGEwgeA3ZIOl9SAbgB2DkAPyKRSCTCAKaGzKwu6VbgAfwjkbvM7Ol++xGJRCIRz0Bemmpm9wH3DaLtSCQSiSwnLsYRiUQiQ04MBJFIJDLkxEAQiUQiQ04MBJFIJDLknBarj0o6DDx/ktW3AkfW0Z31Ivq1NqJfayP6tTY2ql8/ZmZnvpLRaREITgVJ31rN6nv9Jvq1NqJfayP6tTaG3a84NRSJRCJDTgwEkUgkMuQMQyC4c9AOdCH6tTaiX2sj+rU2htqvDf+MIBKJRCIrMwwjgkgkEomsQAwEkUgkMuRsmEAg6RpJ35O0R9JtHfRFSXcH/aOSXtMHn86T9LCkZyQ9Len3O9hcJaks6fGwvb/XfoV290n6TmjzWx30kvS3ob+elHRpH3x6bUs/PC6pIundbTZ96S9Jd0k6JOmpFtlmSQ9J2h3SM7rUvTHY7JZ0Yx/8+pCk74bjdK+kqS51VzzmPfDrDkk/bDlW13Wpu+K12wO/7m7xaZ+kx7vU7WV/dbw3DOwcs/AaudN5wy9n/RxwAVAAngB+qs3mFuATIX8DcHcf/DobuDTkx4FnO/h1FfClAfTZPmDrCvrrgPvxb5S7Anh0AMf0JfwfYvreX8AbgUuBp1pkfwHcFvK3AR/sUG8zsDekZ4T8GT3262ogF/If7OTXao55D/y6A3jvKo7zitfuevvVpv9L4P0D6K+O94ZBnWMbZURwObDHzPaaWRX4AnB9m831wGdD/l+BN0m9ffu1mR0ws10hPw08g39n8+nA9cA/mucRYErS2X1s/03Ac2Z2sv8oPyXM7OvAsTZx6zn0WeCtHar+MvCQmR0zs+PAQ8A1vfTLzB40s3ooPoJ/619f6dJfq2E1125P/ArX/28An1+v9lbLCveGgZxjGyUQnAP8oKW8nxNvuE2bcNGUgS198Q4IU1GvAx7toP55SU9Iul/ST/fJJQMelPRtSTd30K+mT3vJDXS/QAfRXwDbzOwA+AsZOKuDzaD77Sb8SK4Tr3TMe8GtYcrqri7THIPsrzcAB81sdxd9X/qr7d4wkHNsowSCTt/s238XuxqbniBpDLgHeLeZVdrUu/DTHxcDHwH+vR8+Ab9gZpcC1wLvkvTGNv0g+6sAvAX4Ygf1oPprtQyy324H6sDnupi80jFfb/4OuBC4BDiAn4ZpZ2D9BfwmK48Get5fr3Bv6Fqtg+yU+myjBIL9wHkt5XOBF7vZSMoBk5zcUHZNSMrjD/TnzOzf2vVmVjGzmZC/D8hL2tprv8zsxZAeAu7FD9FbWU2f9oprgV1mdrBdMaj+ChxsTI+F9FAHm4H0W3hg+CvAb1mYSG5nFcd8XTGzg2aWmZkDPtWlvUH1Vw74NeDubja97q8u94aBnGMbJRA8BuyQdH74NnkDsLPNZifQeLr+duCr3S6Y9SLMQf498IyZ/VUXm+2NZxWSLscfk6M99muTpPFGHv+w8ak2s53A78hzBVBuDFn7QNdvaoPorxZaz6Ebgf/oYPMAcLWkM8JUyNVB1jMkXQP8IfAWM5vrYrOaY77efrU+U3pbl/ZWc+32gl8Cvmtm+zspe91fK9wbBnOO9eKJ+CA2/K9cnsX/AuH2IPtT/MUBUMJPNewBvglc0AeffhE/ZHsSeDxs1wHvBN4ZbG4Fnsb/WuIR4Mo++HVBaO+J0Hajv1r9EvCx0J/fAS7r03Ecxd/YJ1tkfe8vfCA6ANTw38B+D/9M6b+A3SHdHGwvAz7dUvemcJ7tAX63D37twc8ZN86xxq/jXgXct9Ix77Ff/xTOnSfxN7iz2/0K5ROu3V76FeSfaZxTLbb97K9u94aBnGNxiYlIJBIZcjbK1FAkEolETpIYCCKRSGTIiYEgEolEhpwYCCKRSGTIiYEgEolEhpwYCCKRdUDSlKRbBu1HJHIyxEAQiZwiklJgCr/C7VrqSVK8BiMDJ56EkaFD0u1h/fuvSPq8pPdK+pqky4J+q6R9If8aSd+QtCtsVwb5VWE9+X/G/2nqA8CFYe36DwWb90l6LCy69ict+3tG0sfx6yadJ+kzkp6SX/v+Pf3vkciwkxu0A5FIP5H0evwyBq/Dn/+7gG+vUOUQ8GYzW5C0A/9P1cuC7nLgIjP7flhB8iIzuyS0czWwI9gI2BkWLXsBeC3+36C3BH/OMbOLQr2OL5WJRHpJDASRYeMNwL0W1uSR9Err2uSBj0q6BMiAn2jRfdPMvt+l3tVh+99QHsMHhheA582/4wH8S0UukPQR4MvAg2v8PJHIKRMDQWQY6bSuSp2lqdJSi/w9wEHg4qBfaNHNrtCGgD83s08uE/qRQ7OemR2XdDH+ZSPvwr8o5abVfIhIZL2Izwgiw8bXgbdJGgmrS/5qkO8DXh/yb2+xnwQOmF9K+R34Vyt2Yhr/ysEGDwA3hfXmkXSOpBNeMhKW0E7M7B7gj/GvVYxE+kocEUSGCjPbJelu/GqPzwPfCKoPA/8i6R3AV1uqfBy4R9KvAw/TZRRgZkcl/bf8S9LvN7P3SfpJ4H/CqtkzwG/jp5daOQf4h5ZfD/3RKX/ISGSNxNVHI0ONpDuAGTP78KB9iUQGRZwaikQikSEnjggikUhkyIkjgkgkEhlyYiCIRCKRIScGgkgkEhlyYiCIRCKRIScGgkgkEhly/h9sAxUpvmAYYAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rhos = np.array([0.2, 0.4, 0.6, 0.8, 0.9])\n",
    "\n",
    "drstar = -0.0025 * rhos ** (np.arange(T)[:, np.newaxis])\n",
    "dpi = G['pi']['rstar'] @ drstar\n",
    "\n",
    "plt.plot(10000 * dpi[:21])\n",
    "plt.title(r'Inflation responses monetary policy shocks')\n",
    "plt.xlabel('quarters')\n",
    "plt.ylabel('bp deviation from ss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=\"4-nonlinear\"></a>\n",
    "\n",
    "## 4. Nonlinear dynamics\n",
    "Conceptually there's nothing new in this section compared to the Krusell-Smith notebook. We're going to implement a quasi-Newton algorithm to solve for the unknown sequences $U=(\\pi, w, Y)$ given some sequences of shocks $(r^*, Z).$ We initialize the algorithm by the naive guess that the variables in $U$ stay constant at their steady-state level. Then we evaluate the DAG and update the guess using the inverse Jacobian $H_U^{-1}.$ The algorithm converges in a few steps, despite the presence of substantial nonlinearities."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1 A typical monetary policy shock\n",
    "Note that the linearized solution ignores price adjustment costs. For a monetary policy shock of typical size and persistence, this does not really matter.   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "On iteration 0\n",
      "   max error for nkpc_res is 0.00E+00\n",
      "   max error for asset_mkt is 1.46E-02\n",
      "   max error for labor_mkt is 2.73E-03\n",
      "On iteration 1\n",
      "   max error for nkpc_res is 1.16E-06\n",
      "   max error for asset_mkt is 1.33E-04\n",
      "   max error for labor_mkt is 6.89E-06\n",
      "On iteration 2\n",
      "   max error for nkpc_res is 4.81E-08\n",
      "   max error for asset_mkt is 2.21E-06\n",
      "   max error for labor_mkt is 1.42E-07\n",
      "On iteration 3\n",
      "   max error for nkpc_res is 1.26E-09\n",
      "   max error for asset_mkt is 3.46E-08\n",
      "   max error for labor_mkt is 8.41E-10\n",
      "On iteration 4\n",
      "   max error for nkpc_res is 2.10E-11\n",
      "   max error for asset_mkt is 5.01E-10\n",
      "   max error for labor_mkt is 1.26E-11\n"
     ]
    }
   ],
   "source": [
    "rho_r, sig_r = 0.61, -0.01/4\n",
    "drstar = sig_r * rho_r ** (np.arange(T))\n",
    "rstar = ss['r'] + drstar\n",
    "\n",
    "H_U = jac.get_H_U(block_list, unknowns, targets, T, ss, use_saved=True)\n",
    "H_U_factored = utils.factor(H_U)\n",
    "\n",
    "td_nonlin = nonlinear.td_solve(ss, block_list, unknowns, targets, H_U_factored=H_U_factored,rstar=rstar)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dC_lin = 100 * G['C']['rstar'] @ drstar / ss['C']\n",
    "dC_nonlin = 100 * (td_nonlin['C']/ss['C'] - 1) \n",
    "\n",
    "plt.plot(dC_lin[:21], label='linear', linestyle='-', linewidth=2.5)\n",
    "plt.plot(dC_nonlin[:21], label='nonlinear', linestyle='--', linewidth=2.5)\n",
    "plt.title(r'Consumption response to 1% monetary policy shock')\n",
    "plt.xlabel('quarters')\n",
    "plt.ylabel('% deviation from ss')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2 A very large monetary policy shock\n",
    "However, the nonlinearities may become substantial for very large or persistent monetary policy shocks. Reassuringly, the Jacobian still works well as an updating rule. The quasi-Newton method for a 10% monetary policy shock (extremely large!) still converges below in just 9 iterations, despite nonlinearities evident in the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "On iteration 0\n",
      "   max error for nkpc_res is 0.00E+00\n",
      "   max error for asset_mkt is 1.41E-01\n",
      "   max error for labor_mkt is 2.68E-02\n",
      "On iteration 1\n",
      "   max error for nkpc_res is 9.66E-05\n",
      "   max error for asset_mkt is 1.30E-02\n",
      "   max error for labor_mkt is 5.55E-04\n",
      "On iteration 2\n",
      "   max error for nkpc_res is 2.62E-05\n",
      "   max error for asset_mkt is 2.19E-03\n",
      "   max error for labor_mkt is 7.31E-04\n",
      "On iteration 3\n",
      "   max error for nkpc_res is 3.84E-06\n",
      "   max error for asset_mkt is 3.80E-04\n",
      "   max error for labor_mkt is 9.03E-05\n",
      "On iteration 4\n",
      "   max error for nkpc_res is 1.50E-06\n",
      "   max error for asset_mkt is 6.39E-05\n",
      "   max error for labor_mkt is 1.83E-05\n",
      "On iteration 5\n",
      "   max error for nkpc_res is 1.26E-07\n",
      "   max error for asset_mkt is 1.05E-05\n",
      "   max error for labor_mkt is 2.52E-06\n",
      "On iteration 6\n",
      "   max error for nkpc_res is 3.47E-08\n",
      "   max error for asset_mkt is 1.72E-06\n",
      "   max error for labor_mkt is 4.66E-07\n",
      "On iteration 7\n",
      "   max error for nkpc_res is 3.43E-09\n",
      "   max error for asset_mkt is 2.87E-07\n",
      "   max error for labor_mkt is 6.90E-08\n",
      "On iteration 8\n",
      "   max error for nkpc_res is 8.33E-10\n",
      "   max error for asset_mkt is 4.63E-08\n",
      "   max error for labor_mkt is 1.23E-08\n",
      "On iteration 9\n",
      "   max error for nkpc_res is 1.02E-10\n",
      "   max error for asset_mkt is 7.80E-09\n",
      "   max error for labor_mkt is 1.88E-09\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rho_r, sig_r = 0.61, -0.10/4\n",
    "drstar = sig_r * rho_r ** (np.arange(T))\n",
    "rstar = ss['r'] + drstar\n",
    "\n",
    "td_nonlin = nonlinear.td_solve(ss, block_list, unknowns, targets, H_U_factored=H_U_factored, rstar=rstar)\n",
    "\n",
    "dC_lin = 100 * G['C']['rstar'] @ drstar / ss['C']\n",
    "dC_nonlin = 100 * (td_nonlin['C']/ss['C'] - 1) \n",
    "\n",
    "plt.plot(dC_lin[:21], label='linear', linestyle='-', linewidth=2.5)\n",
    "plt.plot(dC_nonlin[:21], label='nonlinear', linestyle='--', linewidth=2.5)\n",
    "plt.title(r'Consumption response to 10% monetary policy shock')\n",
    "plt.xlabel('quarters')\n",
    "plt.ylabel('% deviation from ss')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=\"5-determinacy\"></a>\n",
    "\n",
    "## 5. Local determinacy\n",
    "Local determinacy boils down to the invertibility of the matrix $H_U$. The steady state is a locally-determinate equilibrium if and only if $H_U$ is invertible. \n",
    "\n",
    "**Numerical approach.** In practice, $H_U$ is obtained numerically for a finite horizon, and thus we can never expect it to be exactly singular, even if equilibrium is indeterminate. Still, near-singularity of $H_U$, especially when it becomes more drastic as the truncation horizon $T$ is increased, is a likely indication of indeterminacy.\n",
    "\n",
    "In practice, we have found that indeterminacy is best detected by looking at the last few singular values: if the smallest is discontinuously smaller than the second and third smallest, then indeterminacy is likely.\n",
    "\n",
    "**Our contribution: winding number criterion.** A better solution is to use the winding number criterion introduced in our paper, which rapidly gives an exact answer. This criterion exploits the \"asymptotic time invariant\" structure of the Jacobians in SHADE models: within each Jacobian, each diagonal eventually converges to some constant, and these constants are close to zero far enough away from the main diagonal.\n",
    "\n",
    "Given knowledge of the asymptotic structure of $H_U$, which is encoded in an array $A$, the criterion calculates the \"winding number\" of the curve\n",
    "\n",
    "$$\n",
    "\\det A(\\lambda) = \\det\\sum_{j=-\\infty}^\\infty A_j e^{ij\\lambda} \\tag{1}\n",
    "$$\n",
    "\n",
    "as $\\lambda$ varies from $0$ to $2\\pi$. Here, $A_j$ is the $n_u\\times n_u$ matrix representing the asymptotic value on the $j$th diagonal above the main diagonal for all pairs of targets and unknowns. The \"winding number\" is the number of times the curve (1) wraps counterclockwise around the origin in the complex plane.\n",
    "\n",
    "A winding number of 0 indicates that the model has a unique solution around the steady state, while a winding number of -1 or less indicates indeterminacy.\n",
    "\n",
    "**Example in our HANK model.** As it is well-known, determinacy in the New Keynesian models requires that the interest rate rule is sufficiently responsive to inflation. Therefore, we're going to illustrate the issue by varying the parameter $\\phi$ and tracing its effect on $H_U.$\n",
    "\n",
    "### 5.1 Stable case\n",
    "Let's start with the the baseline calibration with $\\phi=1.5$. Both approaches show the model is determinate, as expected."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Smallest singular values: 0.0720, 0.0715, 0.0715\n",
      "Winding number: 0\n"
     ]
    }
   ],
   "source": [
    "# smallest singular values\n",
    "_, s, _ = np.linalg.svd(H_U)\n",
    "print(f'Smallest singular values: {s[-3]:.4f}, {s[-2]:.4f}, {s[-1]:.4f}')\n",
    "\n",
    "# winding number test\n",
    "# first, use get_H_U with asymptotic=True to get array A representing asymptotic H_U\n",
    "A = jac.get_H_U(block_list, unknowns, targets, T, ss, asymptotic=True, save=True, use_saved=True)\n",
    "\n",
    "# then apply winding number criterion\n",
    "wn = det.winding_criterion(A)\n",
    "print(f'Winding number: {wn}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.2 Unstable case\n",
    "Let's see what happens with $\\phi=0.75$. First of all, we'll have to recompute the Jacobian. It's important to realize that $\\phi$ does not affect the steady state, and affects dynamics only through the monetary block. Thus, recomputing the Jacobians of the household block would be wasteful. We can avoid this by setting ``use_saved=True``. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "ss2 = {**ss, 'phi': 0.75}\n",
    "H_U2 = jac.get_H_U(block_list, unknowns, targets, T, ss2, use_saved=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This time both tests reveal clear indeterminacy: the smallest singular value is discontinuously smaller than the others, and the winding number is -1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Smallest singular values: 0.0967, 0.0960, 0.0000\n",
      "Winding number: -1\n"
     ]
    }
   ],
   "source": [
    "# smallest singular values\n",
    "_, s2, _ = np.linalg.svd(H_U2)\n",
    "print(f'Smallest singular values: {s2[-3]:.4f}, {s2[-2]:.4f}, {s2[-1]:.4f}')\n",
    "\n",
    "# winding number\n",
    "A2 = jac.get_H_U(block_list, unknowns, targets, T, ss2, asymptotic=True, use_saved=True)\n",
    "wn2 = det.winding_criterion(A2)\n",
    "print(f'Winding number: {wn2}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Not surprisingly, if we tried to use this Jacobian to compute impulse responses, we'd fail. (We'll wrap in a try/except block to avoid a giant error message.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "On iteration 0\n",
      "   max error for nkpc_res is 0.00E+00\n",
      "   max error for asset_mkt is 1.41E-01\n",
      "   max error for labor_mkt is 2.68E-02\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Bence\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:26: RuntimeWarning: invalid value encountered in log\n",
      "C:\\Users\\Bence\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:4: RuntimeWarning: invalid value encountered in log\n",
      "  after removing the cwd from sys.path.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cannot solve constrained household's problem: No convergence after 30 iterations!\n"
     ]
    }
   ],
   "source": [
    "try:\n",
    "    td_nonlin = nonlinear.td_solve(ss2, block_list, unknowns, targets, H_U=H_U2,rstar=rstar)\n",
    "except ValueError as e:\n",
    "    print(e)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In fact, it fails after the first iteration: since the Jacobian is nearly singular, using its inverse in Newton's method leads to a very large step to the next guess, which then is outside the admissible domain and leads to an error within the household routine."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.3 Why use the winding number criterion?\n",
    "\n",
    "It's very fast and precise. We can use bisection, for instance, to get the exact threshold at which the model becomes determinate. It turns out that this is at approximately $\\phi=1.005$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Threshold for determinacy: phi=1.005\n"
     ]
    }
   ],
   "source": [
    "phi_low = 0.8\n",
    "phi_high = 1.2\n",
    "while phi_high - phi_low > 1E-6:\n",
    "    phi_mid = (phi_low + phi_high)/2\n",
    "    ss_cur = {**ss, 'phi': phi_mid}\n",
    "    A_cur = jac.get_H_U(block_list, unknowns, targets, T, ss_cur,\n",
    "                                        asymptotic=True, use_saved=True)\n",
    "    wn_cur = det.winding_criterion(A_cur)\n",
    "    if wn_cur == 0:\n",
    "        phi_high = phi_mid\n",
    "    else:\n",
    "        phi_low = phi_mid\n",
    "phi_threshold = (phi_low + phi_high)/2\n",
    "print(f'Threshold for determinacy: phi={phi_threshold:.3f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can compare to the results from looking at singular values. Specifically, we'll look at the ratio of the smallest to the second-smallest singular value for a range of $\\phi$ around the determinacy threshold we've identified.\n",
    "\n",
    "This takes several seconds, because the singular value decomposition is costly and we need to redo it for every $\\phi$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# non-uniform grid of phis to get extra precision near\n",
    "# where we know from winding number test the threshold lies\n",
    "phis = np.unique(np.concatenate((np.linspace(0.99, 1.00, 5),\n",
    "                                 np.linspace(1.00, 1.01, 10),\n",
    "                                 np.linspace(1.01, 1.02, 5))))\n",
    "\n",
    "sv_ratio = np.empty_like(phis)\n",
    "for it, phi in enumerate(phis):\n",
    "    ss_cur = {**ss, 'phi': phi}\n",
    "    H_U_cur = jac.get_H_U(block_list, unknowns, targets, T, ss_cur, use_saved=True)\n",
    "\n",
    "    _, s, _ = np.linalg.svd(H_U_cur)\n",
    "    sv_ratio[it] = s[-1] / s[-2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's plot this ratio against the winding number plus 1, which jumps up at the determinacy threshold we've already calculated."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# winding number plus 1 jumps up at phi_threshold\n",
    "phis_wn = [phis[0], phi_threshold, phi_threshold, phis[-1]]\n",
    "wns = [0, 0, 1, 1]\n",
    "\n",
    "plt.plot(phis_wn, wns, linewidth=2, label=r'winding number + 1')\n",
    "plt.plot(phis, sv_ratio, linewidth=2, label=r'singular value ratio', linestyle='--')\n",
    "plt.legend(framealpha=0)\n",
    "plt.xlabel(r'Taylor rule coefficient $\\phi$');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see that the two approaches give consistent answers, but the winding number approach is far more precise and immediate."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.4 Visualizing the winding number criterion\n",
    "To see how this works, we can also directly plot the curve $\\det A(\\lambda)$ for which we're taking the winding number. The function `det.detA_path`, which is called by `det.winding_criterion` under the hood, provides this.\n",
    "\n",
    "**Indeterminate case.** First let's do so for an indeterminate case $\\phi=1.001$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "phi = 1.001\n",
    "ss_cur = {**ss, 'phi': phi}\n",
    "A_cur = jac.get_H_U(block_list, unknowns, targets, T, ss_cur,\n",
    "                    asymptotic=True, use_saved=True)\n",
    "\n",
    "det_Alambda = det.detA_path(A_cur)\n",
    "x, y = det_Alambda.real, det_Alambda.imag\n",
    "\n",
    "# plot curve\n",
    "plt.plot(x, y, label=r'$\\det A(\\lambda)$', linewidth=3);\n",
    "\n",
    "# dot for origin\n",
    "plt.plot(0, 0, marker='o', markersize=5, color=\"black\")\n",
    "\n",
    "# arrow to show orientation (using rate of change around lambda=0)\n",
    "plt.arrow(x[0], y[0], 0.001*(x[1]-x[-2]), 0.001*(y[1]-y[-2]), color='C0',\n",
    "          width=0.0001, head_width=0.05, head_length=0.08)\n",
    "plt.title(r'Indeterminate case: $\\phi=1.001$')\n",
    "plt.xlabel(r'Real')\n",
    "plt.ylabel(r'Imaginary');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We clearly see the winding number of -1 here, corresponding to a single clockwise trajectory around the origin.\n",
    "\n",
    "**Determinate case.** Now let's try the same for $\\phi=1.007$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "phi = 1.007\n",
    "ss_cur = {**ss, 'phi': phi}\n",
    "A_cur = jac.get_H_U(block_list, unknowns, targets, T, ss_cur,\n",
    "                    asymptotic=True, use_saved=True)\n",
    "\n",
    "det_Alambda = det.detA_path(A_cur)\n",
    "x, y = det_Alambda.real, det_Alambda.imag\n",
    "\n",
    "# plot curve\n",
    "plt.plot(x, y, label=r'$\\det A(\\lambda)$', linewidth=3);\n",
    "\n",
    "# dot for origin\n",
    "plt.plot(0, 0, marker='o', markersize=5, color=\"black\")\n",
    "\n",
    "# arrow to show orientation (using rate of change around lambda=0)\n",
    "plt.arrow(x[0], y[0], 0.001*(x[1]-x[-2]), 0.001*(y[1]-y[-2]), color='C0',\n",
    "          width=0.0001, head_width=0.05, head_length=0.08)\n",
    "plt.title(r'Determinate case: $\\phi=1.007$')\n",
    "plt.xlabel(r'Real')\n",
    "plt.ylabel(r'Imaginary');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here the winding number is zero: the curve has shifted such that it no longer wraps around the origin at all."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
